[X2Go-Commits] x2goserver.git - master (branch) updated: 3.1.1.3-310-g11ac71b
X2Go dev team
git-admin at x2go.org
Fri Jan 3 18:00:35 CET 2014
The branch, master has been updated
via 11ac71b5991581581645a906f75d46b92df79b75 (commit)
from 0a9acf654da524a5ce58b221c97f5843a07ef836 (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 11ac71b5991581581645a906f75d46b92df79b75
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Sat Dec 28 22:34:42 2013 +0100
Avoid one argument system calls and backticks in x2gocleansessions and x2golistsessions_root.
-----------------------------------------------------------------------
Summary of changes:
debian/changelog | 2 ++
debian/control | 1 +
x2goserver.spec | 1 +
x2goserver/sbin/x2gocleansessions | 44 ++++++++++++++++++++++-----------
x2goserver/sbin/x2golistsessions_root | 20 ++++++++++-----
5 files changed, 47 insertions(+), 21 deletions(-)
The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 61cff6b..7950bad 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -102,6 +102,8 @@ x2goserver (4.0.1.10-0x2go1) UNRELEASED; urgency=low
- Provide RHEL/Fedora support in x2goserver-xsession.
- Only sanity check for existence of /etc/x2go/Xsession.d on Debian
(derived) systems.
+ - Avoid one argument system calls and backticks in x2gocleansessions and
+ x2golistsessions_root.
* x2goserver.spec:
+ Ship x2goserver.spec (RPM package definitions) in upstream project.
(Thanks to the Fedora package maintainers).
diff --git a/debian/control b/debian/control
index 9d3aa80..42678a3 100644
--- a/debian/control
+++ b/debian/control
@@ -20,6 +20,7 @@ Depends:
x2goserver-common (>= 4.1.0.0-0~),
${misc:Depends},
libfile-basedir-perl,
+ libfile-readbackwards-perl,
libx2go-server-perl (>= ${source:Version}), libx2go-server-db-perl (<< ${source:Version}.1~),
x2goagent (>= 2:3.5.0.15-0~),
lsof,
diff --git a/x2goserver.spec b/x2goserver.spec
index 47f9e69..59edf21 100644
--- a/x2goserver.spec
+++ b/x2goserver.spec
@@ -34,6 +34,7 @@ Requires: bc
Requires: net-tools
Requires: openssh-server
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
+Requires: perl(File::ReadBackwards)
# We need a database
# For killall in x2gosuspend-session
Requires: psmisc
diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions
index 7b8c731..8daffcd 100755
--- a/x2goserver/sbin/x2gocleansessions
+++ b/x2goserver/sbin/x2gocleansessions
@@ -27,6 +27,8 @@ $ENV{'PATH'} = "/bin:/sbin:/usr/bin:/usr/sbin";
use Sys::Hostname;
use Sys::Syslog qw( :standard :macros );
+use File::ReadBackwards;
+
my $x2go_lib_path = `x2gopath libexec`;
use X2Go::Config qw( get_config );
use X2Go::Log qw( loglevel );
@@ -59,8 +61,14 @@ sub has_terminated
my $sess=shift;
my $user=shift;
my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
- my $text=`tail -1 $log 2>/dev/null`;
- if ($text =~ m/Session terminated/)
+ my $log_line;
+ my $log_file = File::ReadBackwards->new( $log ) or return 1;
+ while( defined( $log_line = $log_file->readline ) ) {
+ next if ( ! ( $log_line =~ m/^Session:/ ) );
+ last;
+ }
+ $log_file->close();
+ if ($log_line =~ m/Session terminated/)
{
return 1;
}
@@ -72,8 +80,14 @@ sub is_suspended
my $sess=shift;
my $user=shift;
my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
- my $text=`grep Session: $log 2>/dev/null|tail -1`;
- if ($text =~ m/Session suspended/)
+ my $log_line;
+ my $log_file = File::ReadBackwards->new( $log ) or return 0;
+ while( defined( $log_line = $log_file->readline ) ) {
+ next if ( ! ( $log_line =~ m/^Session:/ ) );
+ last;
+ }
+ $log_file->close();
+ if ($log_line =~ m/Session suspended/)
{
return 1;
}
@@ -183,30 +197,30 @@ elsif ($pid == 0 )
{
# send SIGKILL to dangling X-server processes
syslog('warning', "@sinfo[1]: found stale X-server process (@sinfo[0]), sending SIGKILL");
- qw(kill -9 @sinfo[0]);
+ system("kill", "-9", "@sinfo[0]");
delete $remembered_sessions_since{@sinfo[1]};
}
syslog('debug', "@sinfo[1]: unmounting all shares");
- system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null");
+ system( "su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]");
}
elsif (! check_pid (@sinfo[0], at sinfo[1], at sinfo[12]))
{
- system("su @sinfo[11] -c \"$x2go_lib_path/x2gochangestatus 'F' @sinfo[1] \" 1> /dev/null 2> /dev/null");
+ system("su", "@sinfo[11]", "-c", "$x2go_lib_path/x2gochangestatus 'F' @sinfo[1]");
syslog('debug', "@sinfo[1], pid @sinfo[0] does not exist, changing status from @sinfo[4] to F");
syslog('debug', "@sinfo[1]: unmounting all shares");
- system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null");
+ system("su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]");
}
else
- {
+ {
if ( (@sinfo[4] eq 'R') && ( $remembered_sessions_since{ @sinfo[1] } ge 2 ))
{
if (is_suspended(@sinfo[1], at sinfo[11]))
{
- system("su @sinfo[11] -c \"$x2go_lib_path/x2gochangestatus 'S' @sinfo[1] \" 1> /dev/null 2>/dev/null");
+ system("su", "@sinfo[11]", "-c", "$x2go_lib_path/x2gochangestatus S @sinfo[1]");
syslog('debug', "@sinfo[1] is suspended, changing status from @sinfo[4] to S");
syslog('debug', "@sinfo[1]: unmounting all shares");
- system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null");
+ system("su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]");
}
}
if (@sinfo[4] eq 'S')
@@ -214,8 +228,8 @@ elsif ($pid == 0 )
if (is_running(@sinfo[1], at sinfo[11]))
{
syslog('debug', "@sinfo[1]: unmounting all shares");
- system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null");
- system("su @sinfo[11] -c \"x2gosuspend-session @sinfo[1] \" 1> /dev/null 2>/dev/null");
+ system("su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]");
+ system("su", "@sinfo[11]", "-c", "x2gosuspend-session @sinfo[1]");
syslog('debug', "@sinfo[1] was found running and has now been suspended");
}
}
@@ -224,8 +238,8 @@ elsif ($pid == 0 )
if (!has_terminated(@sinfo[1], at sinfo[11]))
{
syslog('debug', "@sinfo[1]: unmounting all shares");
- system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null");
- system("su @sinfo[11] -c \"x2goterminate-session @sinfo[1] \" 1> /dev/null 2>/dev/null");
+ system("su", "@sinfo[11]", "-c", "export HOSTNAME && x2goumount-session @sinfo[1]");
+ system("su", "@sinfo[11]", "-c", "x2goterminate-session @sinfo[1]");
syslog('debug', "@sinfo[1] has been requested for termination via the session DB");
}
}
diff --git a/x2goserver/sbin/x2golistsessions_root b/x2goserver/sbin/x2golistsessions_root
index e1070dc..2f2d64b 100755
--- a/x2goserver/sbin/x2golistsessions_root
+++ b/x2goserver/sbin/x2golistsessions_root
@@ -23,22 +23,30 @@ use strict;
use Sys::Hostname;
use Sys::Syslog qw( :standard :macros );
+use File::ReadBackwards;
+
use X2Go::Log qw(loglevel);
openlog($0,'cons,pid','user');
setlogmask( LOG_UPTO(loglevel()) );
-sub check_stat
+sub is_suspended
{
my $sess=shift;
my $user=shift;
my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
- my $text=`tail -1 $log 2>/dev/null`;
- if ($text =~ m/Session suspended/)
+ my $log_line;
+ my $log_file = File::ReadBackwards->new( $log ) or return 0;
+ while( defined( $log_line = $log_file->readline ) ) {
+ next if ( ! ( $log_line =~ m/^Session:/ ) );
+ last;
+ }
+ $log_file->close();
+ if ($log_line =~ m/Session suspended/)
{
- return 0;
+ return 1;
}
- return 1;
+ return 0;
}
my $x2go_lib_path = `x2gopath libexec`;
@@ -66,7 +74,7 @@ for (my $i=0;$i<@outp;$i++)
{
if (@sinfo[4]eq 'R')
{
- if (!check_stat(@sinfo[1], at sinfo[11]))
+ if (is_suspended(@sinfo[1], at sinfo[11]))
{
system("su - @sinfo[11] -c \"$x2go_lib_path/x2gochangestatus 'S' @sinfo[1]\" > /dev/null");
@outp[$i] =~ s/\|R\|/\|S\|/;
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).
More information about the x2go-commits
mailing list