[X2Go-Commits] x2goserver.git - release/4.0.1.x (branch) updated: 4.0.1.9-31-g5a2aa0c

X2Go dev team git-admin at x2go.org
Fri Jan 3 18:00:38 CET 2014


The branch, release/4.0.1.x has been updated
       via  5a2aa0c36ef7a57d87e3bb6f7c6b2558ed5430f7 (commit)
      from  12c9c197795256573aa9c9ea65ed400d746f71c4 (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                      |    2 ++
 debian/control                        |    1 +
 x2goserver/sbin/x2gocleansessions     |   43 +++++++++++++++++++++------------
 x2goserver/sbin/x2golistsessions_root |   20 ++++++++++-----
 4 files changed, 45 insertions(+), 21 deletions(-)

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 4c41675..9791fd8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -17,6 +17,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.
     - Provide man page for x2goserver.conf.
   * x2goserver.spec:
     + Ship x2goserver.spec (RPM package definitions) in upstream project.
diff --git a/debian/control b/debian/control
index 0170df5..1adfed1 100644
--- a/debian/control
+++ b/debian/control
@@ -28,6 +28,7 @@ Depends:
  libdbd-pg-perl,
  libdbd-sqlite3-perl,
  libfile-basedir-perl,
+ libfile-readbackwards-perl,
  adduser,
  xauth,
  psmisc,
diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions
index 4d1395b..6d64eb2 100755
--- a/x2goserver/sbin/x2gocleansessions
+++ b/x2goserver/sbin/x2gocleansessions
@@ -23,6 +23,7 @@
 use strict;
 use Sys::Hostname;
 use Sys::Syslog qw( :standard :macros );
+use File::ReadBackwards;
 
 my $x2go_lib_path=`x2gopath libexec`;
 use lib `x2gopath lib`;
@@ -56,8 +57,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;
 	}
@@ -69,8 +76,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;
 	}
@@ -155,30 +168,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')
@@ -186,8 +199,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");
 					}
 				}
@@ -196,8 +209,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 a3b7ea6..56d1781 100755
--- a/x2goserver/sbin/x2golistsessions_root
+++ b/x2goserver/sbin/x2golistsessions_root
@@ -22,25 +22,33 @@
 use strict;
 use Sys::Hostname;
 use Sys::Syslog qw( :standard :macros );
+use File::ReadBackwards;
 
 use lib `x2gopath lib`;
 use x2gologlevel;
 
+
 openlog($0,'cons,pid','user');
 setlogmask( LOG_UPTO(x2gologlevel()) );
 
 
-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`;
@@ -68,7 +76,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