The branch, master has been updated via 7f7ec2c82959950ef5ef2186b2c2ff658f8508ca (commit) from cfbadbad8aa07a623c38313799170feae6f63936 (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 ----------------------------------------------------------------- commit 7f7ec2c82959950ef5ef2186b2c2ff658f8508ca Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Thu Sep 8 17:38:45 2011 +0200 Fix x2goprint, add syslogging, add inline comments. ----------------------------------------------------------------------- Summary of changes: debian/changelog | 1 + x2goserver/bin/x2goprint | 68 +++++++++++++++++++++++++++++++++++----------- 2 files changed, 53 insertions(+), 16 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 8a9626e..87b6158 100644 --- a/debian/changelog +++ b/debian/changelog @@ -35,6 +35,7 @@ x2goserver (3.0.99.5-0~x2go3) UNRELEASED; urgency=low * Create x2goprint user/group on package installation, add same info to INSTALL howto. * Add sanity checks to x2goprint, script can only be run as root. + * Fix x2goprint, add syslogging, add inline comments. [ Martin Oehler ] * Removes old debug code fragment, fixes x2golistsessions parsing. diff --git a/x2goserver/bin/x2goprint b/x2goserver/bin/x2goprint index 89028af..8d0da56 100755 --- a/x2goserver/bin/x2goprint +++ b/x2goserver/bin/x2goprint @@ -23,44 +23,57 @@ use File::Basename; use File::Copy; use File::Path; +use Sys::Syslog qw( :DEFAULT setlogsock); use strict; use lib `echo -n \$(x2gobasepath)/lib/x2go`; use x2godbwrapper; +setlogsock('unix'); +openlog($0,'cons,pid','user'); + sub check_root { my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid($<); my $realuser=$uname; if ($realuser ne "root") { + syslog('err', "x2goprint was called by user $realuser directly, x2goprint exits now!"); die "$realuser, you cannot use x2goprint as non-root user..."; } } -sub usage +sub check_usage { if (scalar(@ARGV) == 1) { + syslog('info', "x2goprint was called with only one cmd line arg, running in x2golistsessions wrapper mode"); system ("su @ARGV[0] -c \"x2golistsessions --all-servers\""); exit 0; } elsif (scalar(@ARGV) != 4) { + syslog('err', "x2goprint was called with a wrong number of cmd line args, x2goprint exits now!"); print STDERR "ERROR: Usage:\nx2goprint user session file titleFile\nx2goprint user\n"; exit 1; } } +# sanity check, this script has to be run with root privileges check_root(); -usage(); -my ($user, $session, $file, $titleFile)=@ARGV; +# check number of cmd line args +check_usage(); + +# get options from the command line +my ($user, $session, $pdfFile, $titleFile)=@ARGV; +# location for incoming jobs is ~x2goprint my ($tm,$tm,$uid,$gid,$tm,$tm,$tm,$homedir)=getpwnam("x2goprint"); my $printdir=$homedir; -my $title; +# extract necessary information from title file and drop it afterwards +my $title='UNTITLED'; if( -e "$printdir/$titleFile") { open (TITLE,"<$printdir/$titleFile"); @@ -68,8 +81,11 @@ if( -e "$printdir/$titleFile") close (TITLE); unlink("$printdir/$titleFile"); } +syslog('info', "x2goprint is processing $printdir/$pdfFile with print job title ,,$title\''"); - +# temp location for placing incoming spool files, so that +# they can can be picked by the session user and further processed +# with user privileges ($tm,$tm,$uid,$gid,$tm,$tm,$tm,$homedir)=getpwnam($user); my $spoolbase="/tmp/spool_$user"; @@ -79,21 +95,41 @@ mkpath($spooltmp); chown $uid, $gid, "$spooltmp"; chmod 0700, "$spooltmp"; +# this last part mainly uses the session user's privileges my ($mounts)=db_getmounts($session); 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\""); - open (RFILE,">$spooltmp/$file.ready"); - print RFILE "$file\n$title"; + # if the client side spool dir (the directory where x2goclient + # waits for incoming print job files) is mounted in the session + # we will copy the print files from the temp location above to + # the SSHFS share mounted from the client system. + + syslog('info', "client-side spool dir is mounted, transferring printable file $pdfFile to X2go client system"); + + if (not move("$printdir/$pdfFile", "$spooltmp")) { + syslog('err', "x2goprint failed to process print spool job for file $pdfFile"); + die "$0: Can't move $printdir/$pdfFile to $spooltmp/"; + } + chown $uid, $gid, "$spooltmp/$pdfFile"; + + system("su $user -c \"mv $spooltmp/$pdfFile $spooldir\""); + syslog('debug', "x2goprint moved file $pdfFile to X2go client's spool dir"); + + open (RFILE,">$spooltmp/$pdfFile.ready"); + print RFILE "$pdfFile\n$title"; close (RFILE); - chown $uid, $gid, "$spooltmp/$file.ready"; - system ("su $user -c \"mv $spooltmp/$file.ready $spooldir\""); -} -else -{ - unlink("$printdir/$file"); + chown $uid, $gid, "$spooltmp/$pdfFile.ready"; + system ("su $user -c \"mv $spooltmp/$pdfFile.ready $spooldir\""); + syslog('debug', "x2goprint moved file $pdfFile.ready to X2go client's spool dir, X2go client should start the print dialog very soon"); + +} else { + + # if the client-side spool dir is not mounted via SSHFS, we will simply drop the + # printable PDF file + + syslog('info', "client-side spool dir is _not_ mounted, dropping spool job $pdfFile"); + + unlink("$printdir/$pdfFile"); } 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).