The branch, build-baikal has been updated via bdbf47f40a422883e18b49f7fa87c098219fa133 (commit) from 108e3eb7b165843884c9c04252b8d8f489ce4da5 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- ----------------------------------------------------------------------- Summary of changes: debian/changelog | 1 + x2goserver/bin/x2gocmdexitmessage | 1 + x2goserver/bin/x2golistdesktops | 44 +- x2goserver/bin/x2golistsessions | 65 ++- x2goserver/bin/x2gomountdirs | 296 ++++++------ x2goserver/bin/x2goprint | 34 +- x2goserver/bin/x2goresume-session | 18 +- x2goserver/bin/x2goruncommand | 120 ++--- x2goserver/bin/x2goshowblocks | 6 +- x2goserver/bin/x2gostartagent | 245 ++++------ x2goserver/bin/x2goumount-session | 140 +++--- x2goserver/lib/x2godbwrapper.pm | 874 +++++++++++++++++----------------- x2goserver/lib/x2golistsessions_root | 60 ++- x2goserver/lib/x2golistsessions_sql | 18 +- x2goserver/lib/x2gosessionlimit | 82 ++-- 15 files changed, 951 insertions(+), 1053 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 718c8d3..77f3189 100644 --- a/debian/changelog +++ b/debian/changelog @@ -6,6 +6,7 @@ x2goserver (3.0.99.5-0~x2go3) UNRELEASED; urgency=low * React to bug #627990, prefer man2html-base over man2html. * Re-arranged script files in /bin and /lib directories, this is still compensated by dh_install and dh_link and needs more work. + * Tab'ified all script files, proper indentation, coding style. [Martin Oehler] * Removes old debug code fragment, fixes x2golistsessions parsing. diff --git a/x2goserver/bin/x2gocmdexitmessage b/x2goserver/bin/x2gocmdexitmessage index 9c5e7bd..3f8e1e7 100755 --- a/x2goserver/bin/x2gocmdexitmessage +++ b/x2goserver/bin/x2gocmdexitmessage @@ -23,4 +23,5 @@ X2GO_ROOT=${HOME}/.x2go MESSAGE_FILE=$X2GO_ROOT/C-$1/cmdoutput +# return command output of the command that was issued by x2goruncommand cat $MESSAGE_FILE \ No newline at end of file diff --git a/x2goserver/bin/x2golistdesktops b/x2goserver/bin/x2golistdesktops index 8ba46ae..2679d6a 100755 --- a/x2goserver/bin/x2golistdesktops +++ b/x2goserver/bin/x2golistdesktops @@ -26,16 +26,16 @@ use Sys::Hostname; my $serv=shift; if( ! $serv) { - $serv=hostname; + $serv=hostname; } my $rsess=`x2golistsessions x2goserver |grep _stR`; my @rsess=split("\n","$rsess"); my @rdisplays; -for(my $i=0;$i<@rsess;$i++) +for (my $i=0;$i<@rsess;$i++) { - my @sinfo=split("\\|",@rsess[$i]); - @rdisplays[$i]=@sinfo[2]; + my @sinfo=split("\\|",@rsess[$i]); + @rdisplays[$i]=@sinfo[2]; } my $rdisp=join("I",@rdisplays); @@ -46,19 +46,19 @@ my $outp=`ls -1 /tmp/.X11-unix/`; my @outp=split("\n","$outp"); for(my $i=0;$i<@outp;$i++) { - my $display=@outp[$i]; - $display=~s/X/:/; - my $checkdisp=$display; - $checkdisp=~s/:/I/; - $checkdisp="${checkdisp}I"; - if (!( $rdisp =~ m/$checkdisp/ )) - { - my $inf=`xwininfo -root -display $display 2> /dev/null`; - if ( $inf=~ m/geometry/) - { - print "$uname\@$display\n"; - } - } + my $display=@outp[$i]; + $display=~s/X/:/; + my $checkdisp=$display; + $checkdisp=~s/:/I/; + $checkdisp="${checkdisp}I"; + if (!( $rdisp =~ m/$checkdisp/ )) + { + my $inf=`xwininfo -root -display $display 2> /dev/null`; + if ( $inf=~ m/geometry/) + { + print "$uname\@$display\n"; + } + } } $outp=`ls -1 /tmp/ | grep x2godesktopsharing_`; @@ -66,9 +66,9 @@ $outp=`ls -1 /tmp/ | grep x2godesktopsharing_`; for(my $i=0;$i<@outp;$i++) { - my @ln=split("\@",@outp[$i]); - if( @ln[1] ne $uname ) - { - print "@ln[1]\@@ln[2]\n"; - } + my @ln=split("\@",@outp[$i]); + if ( @ln[1] ne $uname ) + { + print "@ln[1]\@@ln[2]\n"; + } } diff --git a/x2goserver/bin/x2golistsessions b/x2goserver/bin/x2golistsessions index 0119f3b..5e8f7f5 100755 --- a/x2goserver/bin/x2golistsessions +++ b/x2goserver/bin/x2golistsessions @@ -29,53 +29,52 @@ use x2godbwrapper; sub check_stat { - my $sess=shift; - my $log="$ENV{'HOME'}/.x2go/C-$sess/session.log"; - my $text=`tail -1 $log`; - if($text =~ m/Session suspended/) - { - return 0; - } - return 1; + my $sess=shift; + my $log="$ENV{'HOME'}/.x2go/C-$sess/session.log"; + my $text=`tail -1 $log`; + if ($text =~ m/Session suspended/) + { + return 0; + } + return 1; } my $serv=shift; if( ! $serv) { - $serv=hostname; + $serv=hostname; } my @outp; if($serv eq "--all-servers") { - @outp=db_listsessions_all(); + @outp=db_listsessions_all(); } else { - @outp=db_listsessions($serv); + @outp=db_listsessions($serv); } -for(my $i=0;$i<@outp;$i++) +for (my $i=0;$i<@outp;$i++) { - @outp[$i] =~ s/ //g; - @outp[$i] =~ s/\*/ /g; - my @sinfo=split('\\|',"@outp[$i]"); - if(@sinfo[4]eq 'F') - { - print "@outp[$i]\n"; - } - else - { - if(@sinfo[4]eq 'R') - { - if(!check_stat(@sinfo[1])) - { - db_changestatus( 'S', @sinfo[1] ); - @outp[$i] =~ s/\|R\|/\|S\|/; - system( "x2goumount-session @sinfo[1]"); - - } - } - print "@outp[$i]\n"; - } + @outp[$i] =~ s/ //g; + @outp[$i] =~ s/\*/ /g; + my @sinfo=split('\\|',"@outp[$i]"); + if (@sinfo[4]eq 'F') + { + print "@outp[$i]\n"; + } + else + { + if (@sinfo[4]eq 'R') + { + if(!check_stat(@sinfo[1])) + { + db_changestatus( 'S', @sinfo[1] ); + @outp[$i] =~ s/\|R\|/\|S\|/; + system( "x2goumount-session @sinfo[1]"); + } + } + print "@outp[$i]\n"; + } } diff --git a/x2goserver/bin/x2gomountdirs b/x2goserver/bin/x2gomountdirs index e84149d..7eb0442 100755 --- a/x2goserver/bin/x2gomountdirs +++ b/x2goserver/bin/x2gomountdirs @@ -34,38 +34,38 @@ my $i=0; @dl[$i]=shift; while(@dl[$i]) { - $i++; - @dl[$i]=shift; + $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__/) +if ($dirlist =~ m/__REVERSESSH_PORT__/) { - @dl=split("__REVERSESSH_PORT__","$dirlist"); - $dirlist=@dl[0]; - $port=@dl[1]; - $reverse=1; + @dl=split("__REVERSESSH_PORT__","$dirlist"); + $dirlist=@dl[0]; + $port=@dl[1]; + $reverse=1; } -if($dirlist =~ m/__SSH_PORT__/) +if ($dirlist =~ m/__SSH_PORT__/) { - @dl=split("__SSH_PORT__","$dirlist"); - $dirlist=@dl[0]; - $port=@dl[1]; + @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]; + $host=(split(" ",$ENV{'SSH_CLIENT'}))[0]; } else { - $host='127.0.0.1'; + $host='127.0.0.1'; } print "Host:$host\n"; print "User:$user\n"; @@ -96,200 +96,198 @@ my $spooldir="/tmp/spool_$ENV{'USER'}"; my $mimeboxdir_lnk="$ENV{'HOME'}/.x2go/C-$session/mimebox"; my $mimeboxdir="/tmp/mimebox_$ENV{'USER'}"; -if(! -e $mdir) +if (! -e $mdir) { - mkdir($mdir); + mkdir($mdir); } chmod(0700,$mdir); -if(! -e "$mdir/disk") +if (! -e "$mdir/disk") { - mkdir("$mdir/disk"); + mkdir("$mdir/disk"); } chmod(0700,"$mdir/disk"); -if(! -e "$mdir/cd") +if (! -e "$mdir/cd") { - mkdir("$mdir/cd"); + mkdir("$mdir/cd"); } chmod(0700,"$mdir/cd"); -if(! -e "$mdir/rm") +if (! -e "$mdir/rm") { - mkdir("$mdir/rm"); + mkdir("$mdir/rm"); } chmod(0700,"$mdir/rm"); my $plasmstamp=$mdir."/".$session.".plasmoid"; -if(! -e $spooldir) +if (! -e $spooldir) { - mkdir($spooldir); + mkdir($spooldir); } chmod(0700,$spooldir); $spooldir="$spooldir/$session"; -if(! -e $spooldir) +if (! -e $spooldir) { - mkdir($spooldir); + mkdir($spooldir); } chmod(0700,$spooldir); -if(! -e $mimeboxdir) +if (! -e $mimeboxdir) { - mkdir($mimeboxdir); + mkdir($mimeboxdir); } chmod(0700,$mimeboxdir); $mimeboxdir="$mimeboxdir/$session"; -if(! -e $mimeboxdir) +if (! -e $mimeboxdir) { - mkdir($mimeboxdir); + mkdir($mimeboxdir); } chmod(0700,$mimeboxdir); -if( -d $ldir) +if ( -d $ldir) { - rmdir($ldir); + rmdir($ldir); } -if( ! -l $ldir) +if ( ! -l $ldir) { - system ("ln -s $mdir $ldir"); + system ("ln -s $mdir $ldir"); } -if( -d $spooldir_lnk) +if ( -d $spooldir_lnk) { - rmdir($spooldir_lnk); + rmdir($spooldir_lnk); } -if( ! -l $spooldir_lnk) +if ( ! -l $spooldir_lnk) { - system ("ln -s $spooldir $spooldir_lnk"); + system ("ln -s $spooldir $spooldir_lnk"); } -if( -d $mimeboxdir_lnk) +if ( -d $mimeboxdir_lnk) { - rmdir($mimeboxdir_lnk); + rmdir($mimeboxdir_lnk); } -if( ! -l $mimeboxdir_lnk) +if ( ! -l $mimeboxdir_lnk) { - system ("ln -s $mimeboxdir $mimeboxdir_lnk"); + system ("ln -s $mimeboxdir $mimeboxdir_lnk"); } my $uname=$ENV{'USER'}; my @dirs=split(':',$dirlist); -for(my $i=0;$i<@dirs;$i++) +for (my $i=0;$i<@dirs;$i++) { - my $printspool=0; - my $mimeboxspool=0; - my $mntpath; - if(@dirs[$i]=~m/__PRINT_SPOOL_/) - { - @dirs[$i]=~s/__PRINT_SPOOL_//; - $printspool=1; - $mntpath=$spooldir; - } - elsif(@dirs[$i]=~m/__MIMEBOX_SPOOL_/) - { - @dirs[$i]=~s/__MIMEBOX_SPOOL_//; - $mimeboxspool=1; - $mntpath=$mimeboxdir; - } - else - { - my $p=@dirs[$i]; - if($type ne "dir") - { - $p=~s/\/ramdrive\/mnt\///; - if($p =~ m/CDROM/) - { - $mdir=$mdir."/cd"; - } - else - { - $mdir=$mdir."/rm"; - } - - } - else - { - $mdir=$mdir."/disk"; - } - $p=~s/\//_/g; - $p=~s/ /_/g; - $p=~s/_cygdrive_//g; - $p=~s/~//g; - mkdir("$mdir/$p"); - $mntpath="$mdir/$p"; - } - - if(db_insertmount( $session, $mntpath, $host)) - { - my $code_conv=$ENV{'X2GO_ICONV'}; - if($code_conv ne "") - { - $code_conv="-o $code_conv"; - } - print "inserted,\nsshfs $code_conv -o IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port\n"; - if(system("sshfs $code_conv -o ServerAliveInterval=300,Cipher=blowfish,IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port 2>>~/mounts.log")==0) - { - print "mount @dirs[$i] ok\n"; - - # check if kde4 plasmoid running - my $useplasmoid=0; - if( -e $plasmstamp ) - { - open(STMP,"<$plasmstamp"); - my $stamp=<STMP>; - close (STMP); - if(abs($stamp-time())<15) - { - $useplasmoid=1; - } - } - if(! $printspool && ! $mimeboxspool && ! $useplasmoid) - { - 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"; - db_deletemount( $session, $mntpath); - rmdir($mntpath); - } - } - else - { - print "insertion failed(already mounted?), not mounting\n"; - } + my $printspool=0; + my $mimeboxspool=0; + my $mntpath; + if(@dirs[$i]=~m/__PRINT_SPOOL_/) + { + @dirs[$i]=~s/__PRINT_SPOOL_//; + $printspool=1; + $mntpath=$spooldir; + } + elsif(@dirs[$i]=~m/__MIMEBOX_SPOOL_/) + { + @dirs[$i]=~s/__MIMEBOX_SPOOL_//; + $mimeboxspool=1; + $mntpath=$mimeboxdir; + } + else + { + my $p=@dirs[$i]; + if ($type ne "dir") + { + $p=~s/\/ramdrive\/mnt\///; + if ($p =~ m/CDROM/) + { + $mdir=$mdir."/cd"; + } + else + { + $mdir=$mdir."/rm"; + } + } + else + { + $mdir=$mdir."/disk"; + } + $p=~s/\//_/g; + $p=~s/ /_/g; + $p=~s/_cygdrive_//g; + $p=~s/~//g; + mkdir("$mdir/$p"); + $mntpath="$mdir/$p"; + } + + if (db_insertmount( $session, $mntpath, $host)) + { + my $code_conv=$ENV{'X2GO_ICONV'}; + if ($code_conv ne "") + { + $code_conv="-o $code_conv"; + } + print "inserted,\nsshfs $code_conv -o IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port\n"; + if (system("sshfs $code_conv -o ServerAliveInterval=300,Cipher=blowfish,IdentityFile=$key,UserKnownHostsFile=$key.ident $user\@$host:\"@dirs[$i]\" \"$mntpath\" -p $port 2>>~/mounts.log")==0) + { + print "mount @dirs[$i] ok\n"; + # check if kde4 plasmoid running + my $useplasmoid=0; + if ( -e $plasmstamp ) + { + open(STMP,"<$plasmstamp"); + my $stamp=<STMP>; + close (STMP); + if (abs($stamp-time())<15) + { + $useplasmoid=1; + } + } + if (! $printspool && ! $mimeboxspool && ! $useplasmoid) + { + 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"; + db_deletemount( $session, $mntpath); + rmdir($mntpath); + } + } + else + { + print "insertion failed(already mounted?), not mounting\n"; + } } unlink($key); diff --git a/x2goserver/bin/x2goprint b/x2goserver/bin/x2goprint index 1a4ebaf..9360cf9 100755 --- a/x2goserver/bin/x2goprint +++ b/x2goserver/bin/x2goprint @@ -30,12 +30,12 @@ use x2godbwrapper; if (scalar(@ARGV) ==1) { - system ("su @ARGV[0] -c \"x2golistsessions --all-servers\" "); + system ("su @ARGV[0] -c \"x2golistsessions --all-servers\" "); } elsif (scalar(@ARGV) != 4) { - print STDERR "ERROR: Usage:\nx2goprint user session file titleFile\nx2goprint user\n"; - exit 1; + print STDERR "ERROR: Usage:\nx2goprint user session file titleFile\nx2goprint user\n"; + exit 1; } my ($user, $session, $file, $titleFile)=@ARGV; @@ -46,10 +46,10 @@ my $printdir=$homedir; my $title; if( -e "$printdir/$titleFile") { - open (TITLE,"<$printdir/$titleFile"); - $title=<TITLE>; - close (TITLE); - unlink("$printdir/$titleFile"); + open (TITLE,"<$printdir/$titleFile"); + $title=<TITLE>; + close (TITLE); + unlink("$printdir/$titleFile"); } @@ -63,20 +63,20 @@ chown $uid, $gid, "$spooltmp"; chmod 0700, "$spooltmp"; my ($mounts)=db_getmounts($session); -if( $mounts=~m/$spooldir/) +if ( $mounts=~m/$spooldir/) { - move("$printdir/$file", "$spooltmp") or die "$!: Can't move $file to $spooltmp/"; - chown $uid, $gid, "$spooltmp/$file"; - system("su $user -c \"mv $spooltmp/$file $spooldir\""); + move("$printdir/$file", "$spooltmp") or die "$!: Can't move $file to $spooltmp/"; + chown $uid, $gid, "$spooltmp/$file"; - open (RFILE,">$spooltmp/$file.ready"); - print RFILE "$file\n$title"; - close (RFILE); + system("su $user -c \"mv $spooltmp/$file $spooldir\""); + open (RFILE,">$spooltmp/$file.ready"); + print RFILE "$file\n$title"; + close (RFILE); - chown $uid, $gid, "$spooltmp/$file.ready"; - system ("su $user -c \"mv $spooltmp/$file.ready $spooldir\""); + chown $uid, $gid, "$spooltmp/$file.ready"; + system ("su $user -c \"mv $spooltmp/$file.ready $spooldir\""); } else { - unlink("$printdir/$file"); + unlink("$printdir/$file"); } diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session index 25e7832..0f90311 100755 --- a/x2goserver/bin/x2goresume-session +++ b/x2goserver/bin/x2goresume-session @@ -28,24 +28,21 @@ X2GO_KBD_LAYOUT=$5 X2GO_KBD_TYPE=$6 X2GO_SET_KBD=$7 - - X2GO_AGENT_PID=`x2gogetagent $SESSION_NAME` - X2GO_ROOT=${HOME}/.x2go X2GO_RESIZE=0 X2GO_FULLSCREEN=0 if [ "$X2GO_GEOMETRY" == "" ] then - X2GO_GEOMETRY=fullscreen + X2GO_GEOMETRY=fullscreen fi if [ "$X2GO_GEOMETRY" == "fullscreen" ] then - X2GO_RESIZE=1 - X2GO_FULLSCREEN=1 + X2GO_RESIZE=1 + X2GO_FULLSCREEN=1 fi SESSION_DIR=${X2GO_ROOT}/C-${SESSION_NAME} @@ -58,13 +55,12 @@ LSTR=`echo "$OPTIONS" | awk -F, {'print $2'}` PSTR=`echo "$OPTIONS" | awk -F, {'print $3'}` KTSTR=`echo "$OPTIONS" | awk -F, {'print $12'}` - KTSTR=`echo $KTSTR | sed "s/\//\\\\\\\\\//"` X2GO_KBD_TYPE=`echo $X2GO_KBD_TYPE | sed "s/\//\\\\\\\\\//"` if [ "$X2GO_SET_KBD" == "0" ] then - X2GO_KBD_TYPE="null\/null" + X2GO_KBD_TYPE="null\/null" fi NEWOPTIONS=`echo "$OPTIONS" | sed -e "s/$LSTR/link=$X2GO_LINK/"\ @@ -74,14 +70,10 @@ NEWOPTIONS=`echo "$OPTIONS" | sed -e "s/$LSTR/link=$X2GO_LINK/"\ -e "s/$RSTR/resize=$X2GO_RESIZE/"\ -e "s/$FSTR/fullscreen=$X2GO_FULLSCREEN/"` - -#echo -e "old options:$OPTIONS\n\nnew options:$NEWOPTIONS" - - X2GO_CLIENT=`echo $SSH_CLIENT | awk '{print $1}'` if [ "$X2GO_CLIENT" == "" ] then - X2GO_CLIENT=$HOSTNAME + X2GO_CLIENT=$HOSTNAME fi echo "$NEWOPTIONS" >${SESSION_DIR}/options diff --git a/x2goserver/bin/x2goruncommand b/x2goserver/bin/x2goruncommand index b639774..1af50c2 100755 --- a/x2goserver/bin/x2goruncommand +++ b/x2goserver/bin/x2goruncommand @@ -37,75 +37,56 @@ echo "exec $cmd" >> $MESSAGE_FILE IMEXIT="false" -if [ "$sndsys" == "esd" ] -then - export ESPEAKER=localhost:$4 -elif [ "$sndsys" == "arts" ] -then - export ARTS_SERVER=localhost:$4 +if [ "$sndsys" == "esd" ]; then + export ESPEAKER=localhost:$4 +elif [ "$sndsys" == "arts" ]; then + export ARTS_SERVER=localhost:$4 fi -if [ "$cmd" == "WWWBROWSER" ] -then - if [ -e "/usr/bin/firefox" ] - then - cmd="/usr/bin/firefox" - elif [ -e "/usr/bin/iceweasel" ] - then - cmd="/usr/bin/iceweasel" - elif [ -e "/usr/bin/abrowser" ] - then - cmd="/usr/bin/abrowser" - elif [ -e "/usr/bin/konqueror" ] - then - cmd="/usr/bin/konqueror" - elif [ -e "/usr/bin/galeon" ] - then - cmd="/usr/bin/galeon" - fi +if [ "$cmd" == "WWWBROWSER" ]; then + if [ -e "/usr/bin/firefox" ]; then + cmd="/usr/bin/firefox" + elif [ -e "/usr/bin/iceweasel" ]; then + cmd="/usr/bin/iceweasel" + elif [ -e "/usr/bin/abrowser" ]; then + cmd="/usr/bin/abrowser" + elif [ -e "/usr/bin/konqueror" ]; then + cmd="/usr/bin/konqueror" + elif [ -e "/usr/bin/galeon" ]; then + cmd="/usr/bin/galeon" + fi fi -if [ "$cmd" == "MAILCLIENT" ] -then - if [ -e "/usr/bin/thunderbird" ] - then - cmd="/usr/bin/thunderbird" - elif [ -e "/usr/bin/icedove" ] - then - cmd="/usr/bin/icedove" - elif [ -e "/usr/bin/kmail" ] - then - cmd="/usr/bin/kmail" - elif [ -e "/usr/bin/evolution" ] - then - cmd="/usr/bin/evolution" - fi +if [ "$cmd" == "MAILCLIENT" ]; then + if [ -e "/usr/bin/thunderbird" ]; then + cmd="/usr/bin/thunderbird" + elif [ -e "/usr/bin/icedove" ]; then + cmd="/usr/bin/icedove" + elif [ -e "/usr/bin/kmail" ]; then + cmd="/usr/bin/kmail" + elif [ -e "/usr/bin/evolution" ]; then + cmd="/usr/bin/evolution" + fi fi -if [ "$cmd" == "OFFICE" ] -then - if [ -e "/usr/bin/ooffice" ] +if [ "$cmd" == "OFFICE" ]; then + if [ -e "/usr/bin/ooffice" ] then cmd="/usr/bin/ooffice" fi fi -if [ "$cmd" == "TERMINAL" ] -then - IMEXIT="true" - if [ -e "/usr/bin/konsole" ] - then - cmd="/usr/bin/konsole" - elif [ -e "/usr/bin/gnome-terminal" ] - then - cmd="/usr/bin/gnome-terminal" - elif [ -e "/usr/bin/rxvt" ] - then - cmd="/usr/bin/rxvt" - elif [ -e "/usr/bin/xterm" ] - then - cmd="/usr/bin/xterm" - fi +if [ "$cmd" == "TERMINAL" ]; then + IMEXIT="true" + if [ -e "/usr/bin/konsole" ]; then + cmd="/usr/bin/konsole" + elif [ -e "/usr/bin/gnome-terminal" ]; then + cmd="/usr/bin/gnome-terminal" + elif [ -e "/usr/bin/rxvt" ]; then + cmd="/usr/bin/rxvt" + elif [ -e "/usr/bin/xterm" ]; then + cmd="/usr/bin/xterm" + fi fi EXEC=`which $cmd` @@ -113,22 +94,19 @@ EXEC=`which $cmd` BNAME=`basename $EXEC` if [ "$BNAME" == "rdesktop" ] then - IMEXIT="true" + IMEXIT="true" fi -if [ "$EXEC" != "" ] && [ -x `which $cmd` ] -then - $cmd - #### some applications can quit immediately, we waiting until x2goagent exists - if [ "$X2GO_SESS_TYPE" == "R" ] && [ "$IMEXIT" == "false" ] - then - while [ -d /proc/$X2GO_AGENT_PID ] - do - sleep 1 - done - fi +if [ "$EXEC" != "" ] && [ -x `which $cmd` ]; then + $cmd + #### some applications can quit immediately, we waiting until x2goagent exists + if [ "$X2GO_SESS_TYPE" == "R" ] && [ "$IMEXIT" == "false" ]; then + while [ -d /proc/$X2GO_AGENT_PID ]; do + sleep 1 + done + fi else - echo "X2GORUNCOMMAND ERR NOEXEC:$cmd" > $MESSAGE_FILE + echo "X2GORUNCOMMAND ERR NOEXEC:$cmd" > $MESSAGE_FILE fi kill -TERM $X2GO_AGENT_PID diff --git a/x2goserver/bin/x2goshowblocks b/x2goserver/bin/x2goshowblocks index ad64f65..e5f3d1f 100755 --- a/x2goserver/bin/x2goshowblocks +++ b/x2goserver/bin/x2goshowblocks @@ -30,8 +30,8 @@ my $uname=shift; my $id=shift; my $tbl="mounts"; my @outp=dbsys_getmounts( $id); -for(my $i=0;$i<@outp;$i++) +for (my $i=0;$i<@outp;$i++) { - my $path=(split("\\|",@outp[$i]))[1]; - print `su $uname -c "lsof 2>/dev/null | grep $path"`; + my $path=(split("\\|",@outp[$i]))[1]; + print `su $uname -c "lsof 2>/dev/null | grep $path"`; } diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent index ff19983..37fe767 100755 --- a/x2goserver/bin/x2gostartagent +++ b/x2goserver/bin/x2gostartagent @@ -38,47 +38,43 @@ X2GO_CMD=$9 X2GO_RESIZE=0 X2GO_FULLSCREEN=0 -if [ "$X2GO_STYPE" == "S" ] -then - - SHADOW_MODE=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[1]}'` - SHADOW_USER=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[2]}'` - SHADOW_DESKTOP=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[3]}'` - - echo "suser $SHADOW_USER user $USER " >> /tmp/uagent - - if [ "$SHADOW_USER" != "$USER" ] - then - - OUTPUT=`x2godesktopsharing client $X2GO_CLIENT $@` - if [ "$OUTPUT" == "DENY" ] - then - echo "ACCESS DENIED" 1>&2 - exit -1 +if [ "$X2GO_STYPE" == "S" ]; then + + SHADOW_MODE=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[1]}'` + SHADOW_USER=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[2]}'` + SHADOW_DESKTOP=`echo "$X2GO_CMD"|awk '{split($0,a,"XSHAD"); print a[3]}'` + + echo "suser $SHADOW_USER user $USER " >> /tmp/uagent + + if [ "$SHADOW_USER" != "$USER" ]; then + + OUTPUT=`x2godesktopsharing client $X2GO_CLIENT $@` + if [ "$OUTPUT" == "DENY" ]; then + echo "ACCESS DENIED" 1>&2 + exit -1 + fi + X2GO_COOKIE=`echo $OUTPUT | awk '{print $2}'` + X2GO_PORT=`echo $OUTPUT | awk '{print $1}'` + xauth add ${HOSTNAME}/unix:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} + xauth add ${HOSTNAME}:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} + + echo $X2GO_PORT + echo $X2GO_COOKIE + echo $OUTPUT | awk '{print $3}' + echo $OUTPUT | awk '{print $4}' + echo $OUTPUT | awk '{print $5}' + echo $OUTPUT | awk '{print $6}' + echo $OUTPUT | awk '{print $7}' + exit 0 fi - X2GO_COOKIE=`echo $OUTPUT | awk '{print $2}'` - X2GO_PORT=`echo $OUTPUT | awk '{print $1}'` - xauth add ${HOSTNAME}/unix:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} - xauth add ${HOSTNAME}:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} - - echo $X2GO_PORT - echo $X2GO_COOKIE - echo $OUTPUT | awk '{print $3}' - echo $OUTPUT | awk '{print $4}' - echo $OUTPUT | awk '{print $5}' - echo $OUTPUT | awk '{print $6}' - echo $OUTPUT | awk '{print $7}' - exit - fi fi LIMIT=`x2gosessionlimit` LWORD=`echo $LIMIT | awk '{print $1}'` -if [ "$LWORD" == "LIMIT" ] -then - echo $LIMIT 1>&2 - exit -1 +if [ "$LWORD" == "LIMIT" ]; then + echo $LIMIT 1>&2 + exit -1 fi export NX_CLIENT=/usr/bin/x2gosuspend-agent @@ -87,113 +83,93 @@ COLORDEPTH=`echo "$X2GO_TYPE"|awk '{split($0,a,"-depth_"); print a[2]}'` SESSION_TYPE="D" -if [ "$X2GO_STYPE" == "R" ] -then - SESSION_TYPE="R" -elif [ "$X2GO_STYPE" == "S" ] -then - SESSION_TYPE="S" +if [ "$X2GO_STYPE" == "R" ]; then + SESSION_TYPE="R" +elif [ "$X2GO_STYPE" == "S" ]; then + SESSION_TYPE="S" fi -if [ "$X2GO_CLIENT" == "" ] -then - X2GO_CLIENT=$HOSTNAME +if [ "$X2GO_CLIENT" == "" ]; then + X2GO_CLIENT=$HOSTNAME fi - USED_DISPLAYS=`x2gogetdisplays $HOSTNAME` -while [ "$OUTPUT" != "inserted" ] -do - X2GO_PORT=$(($X2GO_PORT + 1)) - X2GO_PORT=`echo "for(\\$i=$X2GO_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_DISPLAYS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl` - - if [ -e "/tmp/.X${X2GO_PORT}-lock" ] || [ -e "/tmp/.X11-unix/X${X2GO_PORT}" ] - then - OUTPUT="XXX" - else - SESSION_NAME=${USER}-${X2GO_PORT}-`date +"%s"` - if [ "$COLORDEPTH" != "" ] - then - SESSION_NAME="$SESSION_NAME"_st${SESSION_TYPE}${X2GO_CMD}_dp${COLORDEPTH} - SESSION_NAME=`echo "$SESSION_NAME" | sed -e "s/:/PP/g"` - fi - OUTPUT=`x2goinsertsession $X2GO_PORT $HOSTNAME $SESSION_NAME` - fi +while [ "$OUTPUT" != "inserted" ]; do + X2GO_PORT=$(($X2GO_PORT + 1)) + X2GO_PORT=`echo "for(\\$i=$X2GO_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_DISPLAYS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl` + + if [ -e "/tmp/.X${X2GO_PORT}-lock" ] || [ -e "/tmp/.X11-unix/X${X2GO_PORT}" ]; then + OUTPUT="XXX" + else + SESSION_NAME=${USER}-${X2GO_PORT}-`date +"%s"` + if [ "$COLORDEPTH" != "" ]; then + SESSION_NAME="$SESSION_NAME"_st${SESSION_TYPE}${X2GO_CMD}_dp${COLORDEPTH} + SESSION_NAME=`echo "$SESSION_NAME" | sed -e "s/:/PP/g"` + fi + OUTPUT=`x2goinsertsession $X2GO_PORT $HOSTNAME $SESSION_NAME` + fi done USED_PORTS=`x2gogetports $HOSTNAME` -while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ] -do - OUTPUT="" - while [ "$OUTPUT" != "inserted" ] - do - SSH_PORT=$(($SSH_PORT + 1)) +while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]; do + OUTPUT="" + while [ "$OUTPUT" != "inserted" ]; do + SSH_PORT=$(($SSH_PORT + 1)) - ##check if port in /etc/services + #check if port in /etc/services + SSH_PORT=`echo "for(\\$i=$SSH_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_PORTS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl` - SSH_PORT=`echo "for(\\$i=$SSH_PORT;\\$br ne \"true\";\\$i++){ if(\"$USED_PORTS\" =~ m/\\|\\$i\\|/){\\$br=\"false\";}else{\\$br=\"true\";print \\$i;}}"|perl` - - SERV=`grep $SSH_PORT /etc/services` - if [ "$SERV" == "" ] - then - CR=`echo "use IO::Socket; \\$sock = new IO::Socket::INET ( LocalAddr => 'localhost',LocalPort => \"$SSH_PORT\",\ + SERV=`grep $SSH_PORT /etc/services` + if [ "$SERV" == "" ]; then + CR=`echo "use IO::Socket; \\$sock = new IO::Socket::INET ( LocalAddr => 'localhost',LocalPort => \"$SSH_PORT\",\ Proto => 'tcp',Listen => 1,Reuse =>1 ) or die ;print \"OK\";close(\\$sock);"|perl 2>/dev/null` - if [ "$CR" == "OK" ] - then - OUTPUT=`x2goinsertport $HOSTNAME $SESSION_NAME $SSH_PORT` - fi - fi - done - if [ "$GR_PORT" == "" ] - then - GR_PORT=$SSH_PORT - elif [ "$SOUND_PORT" == "" ] - then - SOUND_PORT=$SSH_PORT - else - FS_PORT=$SSH_PORT - fi + if [ "$CR" == "OK" ]; then + OUTPUT=`x2goinsertport $HOSTNAME $SESSION_NAME $SSH_PORT` + fi + fi + done + if [ "$GR_PORT" == "" ]; then + GR_PORT=$SSH_PORT + elif [ "$SOUND_PORT" == "" ]; then + SOUND_PORT=$SSH_PORT + else + FS_PORT=$SSH_PORT + fi done - -if [ "$X2GO_GEOMETRY" == "" ] -then - X2GO_GEOMETRY=fullscreen +if [ "$X2GO_GEOMETRY" == "" ]; then + X2GO_GEOMETRY=fullscreen fi -if [ "$X2GO_GEOMETRY" == "fullscreen" ] -then - X2GO_RESIZE=1 - X2GO_FULLSCREEN=1 +if [ "$X2GO_GEOMETRY" == "fullscreen" ]; then + X2GO_RESIZE=1 + X2GO_FULLSCREEN=1 fi -if [ "$X2GO_STYPE" == "S" ] -then - X2GO_GEOMETRY=`DISPLAY=$SHADOW_DESKTOP xwininfo -root | grep geometry` - X2GO_GEOMETRY=`echo "$X2GO_GEOMETRY" | sed -e "s/ //g"` - X2GO_GEOMETRY=`echo "$X2GO_GEOMETRY" | sed -e "s/-geometry//"` + +if [ "$X2GO_STYPE" == "S" ]; then + X2GO_GEOMETRY=`DISPLAY=$SHADOW_DESKTOP xwininfo -root | grep geometry` + X2GO_GEOMETRY=`echo "$X2GO_GEOMETRY" | sed -e "s/ //g"` + X2GO_GEOMETRY=`echo "$X2GO_GEOMETRY" | sed -e "s/-geometry//"` fi SESSION_DIR=${X2GO_ROOT}/C-${SESSION_NAME} -if [ ! -d $X2GO_ROOT ] -then - mkdir $X2GO_ROOT +if [ ! -d $X2GO_ROOT ]; then + mkdir $X2GO_ROOT fi -if [ ! -d $X2GO_ROOT/ssh ] -then - mkdir $X2GO_ROOT/ssh +if [ ! -d $X2GO_ROOT/ssh ]; then + mkdir $X2GO_ROOT/ssh fi -if [ ! -d $SESSION_DIR ] -then - mkdir $SESSION_DIR +if [ ! -d $SESSION_DIR ]; then + mkdir $SESSION_DIR fi X2GO_COOKIE=`mcookie` @@ -210,55 +186,38 @@ xauth add ${HOSTNAME}/unix:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} xauth add ${HOSTNAME}:${X2GO_PORT} MIT-MAGIC-COOKIE-1 ${X2GO_COOKIE} - if [ "$X2GO_SET_KBD" == "0" ] then -X2GO_HOST=nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},\ -id=${SESSION_NAME},\ -cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=null/null,\ -geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0 + X2GO_HOST="nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},id=${SESSION_NAME},cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=null/null,geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0" else -X2GO_HOST=nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},\ -id=${SESSION_NAME},\ -cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=${X2GO_KBD_TYPE},\ -geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0 + X2GO_HOST="nx/nx,link=${X2GO_LINK},pack=${X2GO_PACK},limit=0,root=${SESSION_DIR},cache=8M,images=32M,type=${X2GO_TYPE},id=${SESSION_NAME},cookie=$X2GO_COOKIE,errors=${SESSION_DIR}/session.log,kbtype=${X2GO_KBD_TYPE},geometry=${X2GO_GEOMETRY},resize=${X2GO_RESIZE},fullscreen=${X2GO_FULLSCREEN},accept=${REMOTE},listen=${GR_PORT},client=linux,menu=0" fi - echo "${X2GO_HOST}:${X2GO_PORT}" >${SESSION_DIR}/options -NX_AGENT=:${X2GO_PORT} - - -SAVED_DISPLAY=$DISPLAY - -DISPLAY=nx/nx,options=${SESSION_DIR}/options:${X2GO_PORT} +NX_AGENT=":${X2GO_PORT}" +SAVED_DISPLAY="$DISPLAY" +DISPLAY="nx/nx,options=${SESSION_DIR}/options:${X2GO_PORT}" export DISPLAY -if [ "$X2GODPI" == "" ] -then - X2GODPIOPTION_="" +if [ "$X2GODPI" == "" ]; then + X2GODPIOPTION_="" else - X2GODPIOPTION_="-dpi $X2GODPI" + X2GODPIOPTION_="-dpi $X2GODPI" fi -if [ "$X2GOXDMCP" == "" ] -then - XDMCPOPT="" +if [ "$X2GOXDMCP" == "" ] ;then + XDMCPOPT="" else - XDMCPOPT="-query $X2GOXDMCP" + XDMCPOPT="-query $X2GOXDMCP" fi -if [ "$X2GO_STYPE" == "S" ] -then - LD_LIBRARY_PATH=$X2GO_LIB x2goagent $X2GODPIOPTION_ -$SESSION_TYPE -auth ~/.Xauthority \ - -S -shadow $SHADOW_DESKTOP -shadowmode $SHADOW_MODE \ - -geometry ${X2GO_GEOMETRY} -name "X2GO-${SESSION_NAME}" ${NX_AGENT} 2>${SESSION_DIR}/session.log & +if [ "$X2GO_STYPE" == "S" ]; then + LD_LIBRARY_PATH=$X2GO_LIB x2goagent $X2GODPIOPTION_ -$SESSION_TYPE -auth ~/.Xauthority -S -shadow $SHADOW_DESKTOP -shadowmode $SHADOW_MODE -geometry ${X2GO_GEOMETRY} -name "X2GO-${SESSION_NAME}" ${NX_AGENT} 2>${SESSION_DIR}/session.log & else - LD_LIBRARY_PATH=$X2GO_LIB x2goagent $X2GODPIOPTION_ $XDMCPOPT -$SESSION_TYPE -auth ~/.Xauthority \ - -geometry ${X2GO_GEOMETRY} -name "X2GO-${SESSION_NAME}" ${NX_AGENT} 2>${SESSION_DIR}/session.log & + LD_LIBRARY_PATH=$X2GO_LIB x2goagent $X2GODPIOPTION_ $XDMCPOPT -$SESSION_TYPE -auth ~/.Xauthority -geometry ${X2GO_GEOMETRY} -name "X2GO-${SESSION_NAME}" ${NX_AGENT} 2>${SESSION_DIR}/session.log & fi X2GO_AGENT_PID=$! diff --git a/x2goserver/bin/x2goumount-session b/x2goserver/bin/x2goumount-session index 92228a6..c673ad0 100755 --- a/x2goserver/bin/x2goumount-session +++ b/x2goserver/bin/x2goumount-session @@ -34,12 +34,12 @@ my $only_path=shift; my $uname=$ENV{'USER'}; my $serv=hostname; -if($only_path) +if ($only_path) { - $only_path=~s/\/ramdrive\/mnt\///; - $only_path=~ s/\//_/g; - my $end="_media"; - $only_path="$ENV{'HOME'}/media/$only_path"; + $only_path=~s/\/ramdrive\/mnt\///; + $only_path=~ s/\//_/g; + my $end="_media"; + $only_path="$ENV{'HOME'}/media/$only_path"; } @@ -55,82 +55,80 @@ close(F); my $use_zenity=0; -if($ENV{'GNOME_DESKTOP_SESSION_ID'} ne "") +if ($ENV{'GNOME_DESKTOP_SESSION_ID'} ne "") { - $use_zenity=1; + $use_zenity=1; } -for($i=0;$i<@outp;$i++) +for ($i=0;$i<@outp;$i++) { - @outp[$i]=~s/ //g; - chomp(@outp[$i]); - chomp(@outp[$i]); - chomp(@outp[$i]); - my @line=split('\|',"@outp[$i]"); - my $path="@line[0]:@line[1]"; - if($only_path) - { - if (@line[1] ne $only_path) - { - goto cont; - } - } - my $j; - my $found=0; - my $remote; - for($j;$j<@mounts;$j++) - { - if(@mounts[$j]=~m/sshfs/ && @mounts[$j]=~m/@line[0]/ && @mounts[$j]=~m/@line[1]/ ) - { - $found=1; - $remote=(split(" ",@mounts[$j]))[0]; - goto break; - } - } -break: - if($found) - { - if(system( "fusermount -u @line[1]" ) == 0) - { - $found=0; - } - else - { - $ENV{'DISPLAY'}=":$display"; - if($use_zenity == 0) - { - system("kdialog --error \"@line[1]\"&"); - } - else - { - system("zenity --error --text \"@line[1]\"&"); - } - } - } - if(! $found) - { - $remote=~s/\//_/g; - $remote=(split(":","$remote"))[1]; - $remote="$ENV{'HOME'}/Desktop/$remote"; - if( -e "$remote(sshfs-disk)") + @outp[$i]=~s/ //g; + chomp(@outp[$i]); + chomp(@outp[$i]); + chomp(@outp[$i]); + my @line=split('\|',"@outp[$i]"); + my $path="@line[0]:@line[1]"; + if ($only_path) + { + if (@line[1] ne $only_path) + { + goto cont; + } + } + my $j; + my $found=0; + my $remote; + for ($j;$j<@mounts;$j++) { - unlink("$remote(sshfs-disk)"); + if (@mounts[$j]=~m/sshfs/ && @mounts[$j]=~m/@line[0]/ && @mounts[$j]=~m/@line[1]/ ) + { + $found=1; + $remote=(split(" ",@mounts[$j]))[0]; + goto break; + } } - - $remote=~s/%2framdrive%2fmnt%2f//; - if( -e "$remote(sshfs-removable)") +break: + if ($found) { - unlink("$remote(sshfs-removable)"); + if (system( "fusermount -u @line[1]" ) == 0) + { + $found=0; + } + else + { + $ENV{'DISPLAY'}=":$display"; + if ($use_zenity == 0) + { + system("kdialog --error \"@line[1]\"&"); + } + else + { + system("zenity --error --text \"@line[1]\"&"); + } + } } - if( -e "$remote(sshfs-cdrom)") + if (! $found) { - unlink("$remote(sshfs-cdrom)"); + $remote=~s/\//_/g; + $remote=(split(":","$remote"))[1]; + $remote="$ENV{'HOME'}/Desktop/$remote"; + if ( -e "$remote(sshfs-disk)") + { + unlink("$remote(sshfs-disk)"); + } + $remote=~s/%2framdrive%2fmnt%2f//; + if ( -e "$remote(sshfs-removable)") + { + unlink("$remote(sshfs-removable)"); + } + if ( -e "$remote(sshfs-cdrom)") + { + unlink("$remote(sshfs-cdrom)"); + } + db_deletemount ($session, @line[1]); + rmdir (@line[1]); } - #print "$session \"@line[1]\"\n"; - db_deletemount ($session, @line[1]); - rmdir (@line[1]); - } -cont: +cont: } diff --git a/x2goserver/lib/x2godbwrapper.pm b/x2goserver/lib/x2godbwrapper.pm index be84bc8..b30185b 100644 --- a/x2goserver/lib/x2godbwrapper.pm +++ b/x2goserver/lib/x2godbwrapper.pm @@ -21,8 +21,8 @@ package x2godbwrapper; use strict; -use Config::Simple; -use DBI; +use Config::Simple; +use DBI; use POSIX; @@ -39,285 +39,274 @@ my $dbpass; my $dbuser; my $sslmode; -if($backend ne 'postgres' && $backend ne 'sqlite') +if ($backend ne 'postgres' && $backend ne 'sqlite') { - die "unknown backend $backend"; + die "unknown backend $backend"; } -if($backend eq 'postgres') +if ($backend eq 'postgres') { - $host=$Config->param("postgres.host"); - $port=$Config->param("postgres.port"); - if(!$host) - { - $host='localhost'; - } - if(!$port) - { - $port='5432'; - } - my $passfile; - if($uname eq 'root') - { - $dbuser='x2godbuser'; - $passfile="/etc/x2go/x2gosql/passwords/x2goadmin"; - } - else - { - $dbuser="x2gouser_$uname"; - $passfile="$homedir/.x2go/sqlpass"; - } - $sslmode=$Config->param("postgres.ssl"); - if(!$sslmode) - { - $sslmode="prefer"; - } - open (FL,"< $passfile") or die "Can't read password file $passfile<br><b>Use x2godbadmin on server to configure database access for user $uname</b><br>"; - $dbpass=<FL>; - close(FL); - chomp($dbpass); + $host=$Config->param("postgres.host"); + $port=$Config->param("postgres.port"); + if (!$host) + { + $host='localhost'; + } + if (!$port) + { + $port='5432'; + } + my $passfile; + if ($uname eq 'root') + { + $dbuser='x2godbuser'; + $passfile="/etc/x2go/x2gosql/passwords/x2goadmin"; + } + else + { + $dbuser="x2gouser_$uname"; + $passfile="$homedir/.x2go/sqlpass"; + } + $sslmode=$Config->param("postgres.ssl"); + if (!$sslmode) + { + $sslmode="prefer"; + } + open (FL,"< $passfile") or die "Can't read password file $passfile<br><b>Use x2godbadmin on server to configure database access for user $uname</b><br>"; + $dbpass=<FL>; + close(FL); + chomp($dbpass); } use base 'Exporter'; our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', - 'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_createsession', 'db_insertmount', - 'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', - 'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot'); + 'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_createsession', 'db_insertmount', + 'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', + 'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot'); - - - - sub dbsys_rmsessionsroot { - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", - "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("delete from sessions where session_id='$sid'"); - $sth->execute()or die; - } - if($backend eq 'sqlite') - { - `x2gosqlitewrapper rmsessionsroot $sid`; - } + my $sid=shift or die "argument \"session_id\" missed"; + if($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", + "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + + my $sth=$dbh->prepare("delete from sessions where session_id='$sid'"); + $sth->execute() or die; + } + if($backend eq 'sqlite') + { + `x2gosqlitewrapper rmsessionsroot $sid`; + } } sub dbsys_listsessionsroot { - my $server=shift or die "argument \"server\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", - "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, - to_char(init_time,'DD.MM.YY*HH24:MI:SS'),cookie,client,gr_port, - sound_port,to_char(last_time,'DD.MM.YY*HH24:MI:SS'),uname, - to_char(now()-init_time,'SSSS'),fs_port from sessions - where server='$server' order by status desc"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join('|',@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper listsessionsroot $server`); - } + my $server=shift or die "argument \"server\" missed"; + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", + "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + + my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, + to_char(init_time,'DD.MM.YY*HH24:MI:SS'),cookie,client,gr_port, + sound_port,to_char(last_time,'DD.MM.YY*HH24:MI:SS'),uname, + to_char(now()-init_time,'SSSS'),fs_port from sessions + where server='$server' order by status desc"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join('|',@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper listsessionsroot $server`); + } } sub dbsys_listsessionsroot_all { - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, - to_char(init_time,'DD.MM.YY*HH24:MI:SS'),cookie,client,gr_port, - sound_port,to_char(last_time,'DD.MM.YY*HH24:MI:SS'),uname, - to_char(now()-init_time,'SSSS'),fs_port from sessions - order by status desc"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join('|',@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper listsessionsroot_all`); - } + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $; + my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, + to_char(init_time,'DD.MM.YY*HH24:MI:SS'),cookie,client,gr_port, + sound_port,to_char(last_time,'DD.MM.YY*HH24:MI:SS'),uname, + to_char(now()-init_time,'SSSS'),fs_port from sessions + order by status desc"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join('|',@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper listsessionsroot_all`); + } } - sub dbsys_getmounts { - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("select client, path from mounts where session_id='$sid'"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join("|",@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper getmounts $sid`); - } - + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select client, path from mounts where session_id='$sid'"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join("|",@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper getmounts $sid`); + } } sub db_getmounts { - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("select client, path from mounts_view where session_id='$sid'"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join("|",@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper getmounts $sid`); - } + my $sid=shift or die "argument \"session_id\" missed"; + if($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select client, path from mounts_view where session_id='$sid'"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join("|",@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper getmounts $sid`); + } } - + sub db_deletemount { - my $sid=shift or die "argument \"session_id\" missed"; - my $path=shift or die "argument \"path\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("delete from mounts_view where session_id='$sid' and path='$path'"); - $sth->execute(); - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - `x2gosqlitewrapper deletemount $sid \"$path\"`; - } - + my $sid=shift or die "argument \"session_id\" missed"; + my $path=shift or die "argument \"path\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("delete from mounts_view where session_id='$sid' and path='$path'"); + $sth->execute(); + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + `x2gosqlitewrapper deletemount $sid \"$path\"`; + } } sub db_insertmount { - my $sid=shift or die "argument \"session_id\" missed"; - my $path=shift or die "argument \"path\" missed"; - my $client=shift or die "argument \"client\" missed"; - my $res_ok=1; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("insert into mounts (session_id,path,client) values ('$sid','$path','$client')"); - $sth->execute(); - if(!$sth->err()) - { - $res_ok=1; - } - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - if( `x2gosqlitewrapper insertmount $sid \"$path\" $client` eq "ok") - { - $res_ok=1; - } - } - return $res_ok; + my $sid=shift or die "argument \"session_id\" missed"; + my $path=shift or die "argument \"path\" missed"; + my $client=shift or die "argument \"client\" missed"; + my $res_ok=1; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("insert into mounts (session_id,path,client) values ('$sid','$path','$client')"); + $sth->execute(); + if (!$sth->err()) + { + $res_ok=1; + } + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + if( `x2gosqlitewrapper insertmount $sid \"$path\" $client` eq "ok") + { + $res_ok=1; + } + } + return $res_ok; } - sub db_insertsession { my $display=shift or die "argument \"display\" missed"; my $server=shift or die "argument \"server\" missed"; - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("insert into sessions (display,server,uname,session_id) values ('$display','$server','$uname','$sid')"); - $sth->execute()or die $_; - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - my $err=`x2gosqlitewrapper insertsession $display $server $sid`; - if($err ne "ok") - { - die "$err: x2gosqlitewrapper insertsession $display $server $sid"; - } - } - + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("insert into sessions (display,server,uname,session_id) values ('$display','$server','$uname','$sid')"); + $sth->execute()or die $_; + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + my $err=`x2gosqlitewrapper insertsession $display $server $sid`; + if ($err ne "ok") + { + die "$err: x2gosqlitewrapper insertsession $display $server $sid"; + } + } } sub db_createsession { - my $cookie=shift or die"argument \"cookie\" missed"; - my $pid=shift or die"argument \"pid\" missed"; - my $client=shift or die"argument \"client\" missed"; - my $gr_port=shift or die"argument \"gr_port\" missed"; - my $snd_port=shift or die"argument \"snd_port\" missed"; - my $fs_port=shift or die"argument \"fs_port\" missed"; - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("update sessions_view set status='R',last_time=now(), - cookie='$cookie',agent_pid='$pid',client='$client',gr_port='$gr_port', - sound_port='$snd_port',fs_port='$fs_port' where session_id='$sid'"); - $sth->execute()or die; - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - my $err= `x2gosqlitewrapper createsession $cookie $pid $client $gr_port $snd_port $fs_port $sid`; - if($err ne "ok") - { - die $err; - } - } - + my $cookie=shift or die"argument \"cookie\" missed"; + my $pid=shift or die"argument \"pid\" missed"; + my $client=shift or die"argument \"client\" missed"; + my $gr_port=shift or die"argument \"gr_port\" missed"; + my $snd_port=shift or die"argument \"snd_port\" missed"; + my $fs_port=shift or die"argument \"fs_port\" missed"; + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("update sessions_view set status='R',last_time=now(), + cookie='$cookie',agent_pid='$pid',client='$client',gr_port='$gr_port', + sound_port='$snd_port',fs_port='$fs_port' where session_id='$sid'"); + $sth->execute()or die; + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + my $err= `x2gosqlitewrapper createsession $cookie $pid $client $gr_port $snd_port $fs_port $sid`; + if ($err ne "ok") + { + die $err; + } + } } sub db_insertport @@ -325,252 +314,239 @@ sub db_insertport my $server=shift or die "argument \"server\" missed"; my $sid=shift or die "argument \"session_id\" missed"; my $sshport=shift or die "argument \"port\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("insert into used_ports (server,session_id,port) values ('$server','$sid','$sshport')"); - $sth->execute()or die; - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - `x2gosqlitewrapper insertport $server $sid $sshport`; - } - + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("insert into used_ports (server,session_id,port) values ('$server','$sid','$sshport')"); + $sth->execute()or die; + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + `x2gosqlitewrapper insertport $server $sid $sshport`; + } } - sub db_resume { - my $client=shift or die "argument \"client\" missed"; - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("update sessions_view set last_time=now(),status='R',client='$client' where session_id = '$sid'"); - $sth->execute()or die; - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - `x2gosqlitewrapper resume $client $sid`; - } - + my $client=shift or die "argument \"client\" missed"; + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("update sessions_view set last_time=now(),status='R',client='$client' where session_id = '$sid'"); + $sth->execute()or die; + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + `x2gosqlitewrapper resume $client $sid`; + } } sub db_changestatus { - my $status=shift or die "argument \"status\" missed"; - my $sid=shift or die "argument \"session_id\" missed"; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("update sessions_view set last_time=now(),status='$status' where session_id = '$sid'"); - $sth->execute()or die; - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - `x2gosqlitewrapper changestatus $status $sid`; - } - + my $status=shift or die "argument \"status\" missed"; + my $sid=shift or die "argument \"session_id\" missed"; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("update sessions_view set last_time=now(),status='$status' where session_id = '$sid'"); + $sth->execute()or die; + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + `x2gosqlitewrapper changestatus $status $sid`; + } } sub db_getdisplays { - #ignore $server - my $server=shift or die "argument \"server\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("select display from servers_view"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]='|'.@data[0].'|'; - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper getdisplays $server`); - } - + #ignore $server + my $server=shift or die "argument \"server\" missed"; + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select display from servers_view"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]='|'.@data[0].'|'; + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper getdisplays $server`); + } } sub db_getports { - #ignore $server - my $server=shift or die "argument \"server\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - my $sth=$dbh->prepare("select port from ports_view"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]='|'.@data[0].'|'; - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper getports $server`); - } - + #ignore $server + my $server=shift or die "argument \"server\" missed"; + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select port from ports_view"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]='|'.@data[0].'|'; + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper getports $server`); + } } sub db_getservers { - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select server,count(*) from servers_view where status != 'F' group by server"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=@data[0]." ".@data[1]; - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper getservers`); - } - + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select server,count(*) from servers_view where status != 'F' group by server"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=@data[0]." ".@data[1]; + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper getservers`); + } } sub db_getagent { - my $sid=shift or die "argument \"session_id\" missed"; - my $agent; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select agent_pid from sessions_view - where session_id ='$sid'"); - $sth->execute()or die; - my @data; - my $i=0; - if(@data = $sth->fetchrow_array) - { - $agent=@data[0]; - } - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - $agent=`x2gosqlitewrapper getagent $sid`; - } - return $agent; + my $sid=shift or die "argument \"session_id\" missed"; + my $agent; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select agent_pid from sessions_view + where session_id ='$sid'"); + $sth->execute()or die; + my @data; + my $i=0; + if (@data = $sth->fetchrow_array) + { + $agent=@data[0]; + } + $sth->finish(); + $dbh->disconnect(); + } + if($backend eq 'sqlite') + { + $agent=`x2gosqlitewrapper getagent $sid`; + } + return $agent; } sub db_getdisplay { - my $sid=shift or die "argument \"session_id\" missed"; - my $display; - if($backend eq 'postgres') - { - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select display from sessions_view - where session_id ='$sid'"); - $sth->execute()or die; - my @data; - my $i=0; - if(@data = $sth->fetchrow_array) - { - $display=@data[0]; - } - $sth->finish(); - $dbh->disconnect(); - } - if($backend eq 'sqlite') - { - $display=`x2gosqlitewrapper getdisplay $sid`; - } - return $display; + my $sid=shift or die "argument \"session_id\" missed"; + my $display; + if ($backend eq 'postgres') + { + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select display from sessions_view + where session_id ='$sid'"); + $sth->execute() or die; + my @data; + my $i=0; + if (@data = $sth->fetchrow_array) + { + $display=@data[0]; + } + $sth->finish(); + $dbh->disconnect(); + } + if ($backend eq 'sqlite') + { + $display=`x2gosqlitewrapper getdisplay $sid`; + } + return $display; } + sub db_listsessions { - my $server=shift or die "argument \"server\" missed"; - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, - to_char(init_time,'DD.MM.YY*HH24:MI:SS'), cookie, client, gr_port, - sound_port, to_char( last_time, 'DD.MM.YY*HH24:MI:SS'), uname, - to_char(now()- init_time,'SSSS'), fs_port from sessions_view - where status !='F' and server='$server' and - ( session_id not like '%XSHAD%') order by status desc"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join('|',@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper listsessions $server`); - } - + my $server=shift or die "argument \"server\" missed"; + if ($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, + to_char(init_time,'DD.MM.YY*HH24:MI:SS'), cookie, client, gr_port, + sound_port, to_char( last_time, 'DD.MM.YY*HH24:MI:SS'), uname, + to_char(now()- init_time,'SSSS'), fs_port from sessions_view + where status !='F' and server='$server' and + (session_id not like '%XSHAD%') order by status desc"); + $sth->execute() or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join('|',@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper listsessions $server`); + } } sub db_listsessions_all { - if($backend eq 'postgres') - { - my @strings; - my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, - to_char(init_time,'DD.MM.YY*HH24:MI:SS'), cookie, client, gr_port, - sound_port, to_char( last_time, 'DD.MM.YY*HH24:MI:SS'), uname, - to_char(now()- init_time,'SSSS'), fs_port from sessions_view - where status !='F' and - ( session_id not like '%XSHAD%') order by status desc"); - $sth->execute()or die; - my @data; - my $i=0; - while (@data = $sth->fetchrow_array) - { - @strings[$i++]=join('|',@data); - } - $sth->finish(); - $dbh->disconnect(); - return @strings; - } - if($backend eq 'sqlite') - { - return split("\n",`x2gosqlitewrapper listsessions_all`); - } - + if($backend eq 'postgres') + { + my @strings; + my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_; + my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status, + to_char(init_time,'DD.MM.YY*HH24:MI:SS'), cookie, client, gr_port, + sound_port, to_char( last_time, 'DD.MM.YY*HH24:MI:SS'), uname, + to_char(now()- init_time,'SSSS'), fs_port from sessions_view + where status !='F' and + (session_id not like '%XSHAD%') order by status desc"); + $sth->execute()or die; + my @data; + my $i=0; + while (@data = $sth->fetchrow_array) + { + @strings[$i++]=join('|',@data); + } + $sth->finish(); + $dbh->disconnect(); + return @strings; + } + if ($backend eq 'sqlite') + { + return split("\n",`x2gosqlitewrapper listsessions_all`); + } } diff --git a/x2goserver/lib/x2golistsessions_root b/x2goserver/lib/x2golistsessions_root index daf7a79..1e60493 100755 --- a/x2goserver/lib/x2golistsessions_root +++ b/x2goserver/lib/x2golistsessions_root @@ -23,27 +23,25 @@ use Sys::Hostname; use strict; - sub check_stat { - my $sess=shift; - my $user=shift; - my $log="~$user/.x2go/C-$sess/session.log"; - my $text=`tail -1 $log`; - if($text =~ m/Session suspended/) - { - return 0; - } - return 1; + my $sess=shift; + my $user=shift; + my $log="~$user/.x2go/C-$sess/session.log"; + my $text=`tail -1 $log`; + if ($text =~ m/Session suspended/) + { + return 0; + } + return 1; } - my $uname; my $serv=shift; -if( ! $serv) +if ( ! $serv) { - $serv=hostname; + $serv=hostname; } my $outp=`x2golistsessions_sql $serv 2>/dev/null`; @@ -51,23 +49,23 @@ my $outp=`x2golistsessions_sql $serv 2>/dev/null`; my @outp=split("\n","$outp"); -for(my $i=0;$i<@outp;$i++) +for (my $i=0;$i<@outp;$i++) { - my @sinfo=split('\\|',"@outp[$i]"); - if(@sinfo[4]eq 'F') - { - print "@outp[$i]\n"; - } - else - { - if(@sinfo[4]eq 'R') - { - if(!check_stat(@sinfo[1],@sinfo[11])) - { - system("su - @sinfo[11] -c \"x2gochangestatus 'S' @sinfo[1]\" > /dev/null"); - @outp[$i] =~ s/\|R\|/\|S\|/; - } - } - print "@outp[$i]\n"; - } + my @sinfo=split('\\|',"@outp[$i]"); + if (@sinfo[4]eq 'F') + { + print "@outp[$i]\n"; + } + else + { + if (@sinfo[4]eq 'R') + { + if (!check_stat(@sinfo[1],@sinfo[11])) + { + system("su - @sinfo[11] -c \"x2gochangestatus 'S' @sinfo[1]\" > /dev/null"); + @outp[$i] =~ s/\|R\|/\|S\|/; + } + } + print "@outp[$i]\n"; + } } diff --git a/x2goserver/lib/x2golistsessions_sql b/x2goserver/lib/x2golistsessions_sql index 4f1abdc..ffaa3c6 100755 --- a/x2goserver/lib/x2golistsessions_sql +++ b/x2goserver/lib/x2golistsessions_sql @@ -25,25 +25,23 @@ use strict; use lib "/usr/lib/x2go"; use x2godbwrapper; - - my $serv=shift; my @array; if($serv eq "--all-servers") { - @array=dbsys_listsessionsroot_all(); + @array=dbsys_listsessionsroot_all(); } else { - @array=dbsys_listsessionsroot ($serv); + @array=dbsys_listsessionsroot ($serv); } my $i; for ( $i=0;$i<@array;$i++) { - my @ln=split('\|',@array[$i]); - if(@ln[4] eq "F") - { - dbsys_rmsessionsroot( @ln[1]); - } - print "@array[$i]\n"; + my @ln=split('\|',@array[$i]); + if (@ln[4] eq "F") + { + dbsys_rmsessionsroot( @ln[1]); + } + print "@array[$i]\n"; } diff --git a/x2goserver/lib/x2gosessionlimit b/x2goserver/lib/x2gosessionlimit index 36b275c..3878c82 100755 --- a/x2goserver/lib/x2gosessionlimit +++ b/x2goserver/lib/x2gosessionlimit @@ -29,20 +29,20 @@ $Config->read('/etc/x2go/x2goserver.conf' ); sub getGroupLimit { - my $group=shift; - my $strlimit=$Config->param("limit groups.$group"); - if($strlimit ne "") - { - if($strlimit == 0) - { - print "0\n"; - exit 0; - } - if($strlimit > $maxlimit) - { - $maxlimit=$strlimit; - } - } + my $group=shift; + my $strlimit=$Config->param("limit groups.$group"); + if ($strlimit ne "") + { + if ($strlimit == 0) + { + print "0\n"; + exit 0; + } + if ($strlimit > $maxlimit) + { + $maxlimit=$strlimit; + } + } } my $uname; @@ -56,18 +56,18 @@ my $strlimit=$Config->param("limit users.$uname"); if($strlimit ne "") { - if($strlimit == 0) - { - print "0\n"; - exit 0; - } - if($strlimit <= $scount) - { - print "$strlimit\n"; - exit 0; - } - print "$strlimit\n"; - exit 0; + if ($strlimit == 0) + { + print "0\n"; + exit 0; + } + if ($strlimit <= $scount) + { + print "$strlimit\n"; + exit 0; + } + print "$strlimit\n"; + exit 0; } @@ -75,23 +75,23 @@ my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = while (my ($name, $passwd, $gid, $members) = getgrent()) { - if( $pgid eq $gid) - { - getGroupLimit $name; - } - my @memebers=split(" ",$members); - foreach my $member (@memebers) - { - if($uname eq $member ) - { - getGroupLimit $name; - } - } + if ( $pgid eq $gid) + { + getGroupLimit $name; + } + my @memebers=split(" ",$members); + foreach my $member (@memebers) + { + if ($uname eq $member ) + { + getGroupLimit $name; + } + } } -if($maxlimit <= $scount) +if ($maxlimit <= $scount) { - print "$maxlimit\n"; - exit 0; + print "$maxlimit\n"; + exit 0; } print "$maxlimit\n"; hooks/post-receive -- x2goserver.git (X2Go Server) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2goserver.git" (X2Go Server).