[X2Go-Commits] x2goserver.git - build-baikal (branch) updated: 3.1.1.3-323-g5c939ac

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


The branch, build-baikal has been updated
       via  5c939ac5aabf296c32adc33326335f1f6b7cc556 (commit)
      from  a550eb7a5dc58acee577343c6d6031d394b79f3b (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:
 X2Go/{Config.pm => Server/Agent.pm}                |   45 ++++-----
 .../Server/Agent/NX.pm                             |   99 +++++++++-----------
 X2Go/Utils.pm                                      |   23 ++++-
 debian/changelog                                   |    3 +
 debian/libx2go-server-perl.install                 |    4 +
 x2goserver.spec                                    |    3 +
 x2goserver/bin/x2golistsessions                    |   22 +----
 x2goserver/bin/x2golistshadowsessions              |   22 +----
 x2goserver/sbin/x2gocleansessions                  |   64 +++----------
 x2goserver/sbin/x2golistsessions_root              |   27 +-----
 10 files changed, 121 insertions(+), 191 deletions(-)
 copy X2Go/{Config.pm => Server/Agent.pm} (58%)
 copy x2goserver/bin/x2golistshadowsessions => X2Go/Server/Agent/NX.pm (57%)
 mode change 100755 => 100644

The diff of changes is:
diff --git a/X2Go/Config.pm b/X2Go/Server/Agent.pm
similarity index 58%
copy from X2Go/Config.pm
copy to X2Go/Server/Agent.pm
index d058753..8e9b00f 100644
--- a/X2Go/Config.pm
+++ b/X2Go/Server/Agent.pm
@@ -1,5 +1,3 @@
-#!/usr/bin/perl
-
 # Copyright (C) 2007-2013 X2Go Project - http://wiki.x2go.org
 #
 # This program is free software; you can redistribute it and/or modify
@@ -20,41 +18,46 @@
 # Copyright (C) 2007-2013  Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
 # Copyright (C) 2007-2013  Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
 
-package X2Go::Config;
+package X2Go::Server::Agent;
 
 =head1 NAME
 
-X2Go::Config - X2Go Config package for Perl
+X2Go::Server::Agent - X2Go Server Agent package for Perl
 
 =head1 DESCRIPTION
 
-X2Go::Config Perl package for X2Go components.
+X2Go::Server::Agent Perl package for X2Go::Server.
 
 =cut
 
 use strict;
-use Config::Simple;
+use X2Go::Utils qw( load_module );
+
+# TODO: when other agents may come into play, the AGENT var has to be read from config file or
+# somehow else...
+my $DEFAULT_AGENT="NX";
+my $AGENT=$DEFAULT_AGENT;
+my $agent_module = "X2Go::Server::Agent::$AGENT";
+load_module $agent_module;
 
 use base 'Exporter';
-our @EXPORT = ( 'get_config', 'get_sqlconfig', );
 
-my $Config;
-my $SqlConfig;
+our @EXPORT=( 'session_has_terminated', 'session_is_running', 'session_is_suspended' );
+
+
 
-sub get_config {
-	if (! defined $Config) {
-		$Config = new Config::Simple(syntax=>'ini');
-		$Config->read('/etc/x2go/x2goserver.conf' );
-	}
-	return $Config;
+sub session_has_terminated {
+	return $agent_module->session_has_terminated(@_);
 }
 
-sub get_sqlconfig {
-	if (! defined $SqlConfig) {
-		$SqlConfig = new Config::Simple(syntax=>'ini');
-		$SqlConfig->read('/etc/x2go/x2gosql/sql' );
-	}
-	return $SqlConfig;
+
+sub session_is_running {
+	return $agent_module->session_is_running(@_);
+}
+
+
+sub session_is_suspended {
+	return $agent_module->session_is_suspended(@_);
 }
 
 1;
diff --git a/x2goserver/bin/x2golistshadowsessions b/X2Go/Server/Agent/NX.pm
old mode 100755
new mode 100644
similarity index 57%
copy from x2goserver/bin/x2golistshadowsessions
copy to X2Go/Server/Agent/NX.pm
index 163dcbc..3bdf7bf
--- a/x2goserver/bin/x2golistshadowsessions
+++ b/X2Go/Server/Agent/NX.pm
@@ -1,5 +1,3 @@
-#!/usr/bin/perl
-
 # Copyright (C) 2007-2013 X2Go Project - http://wiki.x2go.org
 #
 # This program is free software; you can redistribute it and/or modify
@@ -20,38 +18,41 @@
 # Copyright (C) 2007-2013  Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
 # Copyright (C) 2007-2013  Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
 
+package X2Go::Server::Agent;
+
+=head1 NAME
+
+X2Go::Server::Agent - X2Go Server Agent package for Perl
+
+=head1 DESCRIPTION
+
+X2Go::Server::Agent Perl package for X2Go::Server.
+
+=cut
+
 use strict;
-use Sys::Hostname;
+use DBI;
+use POSIX;
 use Sys::Syslog qw( :standard :macros );
 
-use File::ReadBackwards;
+use X2Go::Log qw( loglevel );
 
-use X2Go::Server::DB qw(db_listshadowsessions db_listshadowsessions_all);
-use X2Go::Log qw(loglevel);
-
-openlog($0,'cons,pid','user');
 setlogmask( LOG_UPTO(loglevel()) );
 
-if ( @ARGV ) {
-	syslog('info', "x2golistshadowsessions has been called with options: @ARGV");
-} else {
-	# hiding normal x2golistshadowsessions calls into debug loglevel
-	syslog('debug', "x2golistshadowsessions has been called with no option");
-}
 
-
-sub is_suspended
+sub session_has_terminated
 {
         my $sess=shift;
-        my $log="$ENV{'HOME'}/.x2go/C-${sess}.log";
+        my $user=shift;
+        my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
         my $log_line;
-        my $log_file = File::ReadBackwards->new( $log ) or return 0;
+        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 suspended/)
+        if ($log_line =~ m/Session terminated/)
         {
                 return 1;
         }
@@ -59,45 +60,35 @@ sub is_suspended
 }
 
 
-my $serv=shift;
-if( ! $serv)
+sub session_is_suspended
 {
-	$serv=hostname;
+        my $sess=shift;
+        my $user=shift;
+        my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
+        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;
+        }
+        return 0;
 }
 
-my @outp;
-if($serv eq "--all-servers")
-{
-	@outp=db_listshadowsessions_all();
-}
-else
-{
-	@outp=db_listshadowsessions($serv);
-}
 
-for (my $i=0;$i<@outp;$i++)
+sub session_is_running
 {
-	@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(is_suspended(@sinfo[1]))
-			{
-				db_changestatus( 'S', @sinfo[1] );
-				@outp[$i] =~ s/\|R\|/\|S\|/;
-				system( "x2goumount-session","@sinfo[1]");
-			}
-		}
-		print "@outp[$i]\n";
-	}
+        my $sess=shift;
+        my $user=shift;
+        if (!session_is_suspended($sess, $user) && !session_has_terminated($sess, $user))
+        {
+                return 1;
+        }
+        return 0;
 }
 
-# closing syslog 
-closelog;
+1;
\ No newline at end of file
diff --git a/X2Go/Utils.pm b/X2Go/Utils.pm
index 355d3d4..923d449 100644
--- a/X2Go/Utils.pm
+++ b/X2Go/Utils.pm
@@ -37,7 +37,21 @@ X2Go::Utils Perl package.
 use strict;
 use base 'Exporter';
 
-our @EXPORT = ('source_environment', 'clups', 'sanitizer', );
+our @EXPORT = ( 'source_environment', 'clups', 'sanitizer',
+                'load_module',
+                'system_capture_merged_output', 'system_capture_stdout_output' );
+
+use Sys::Syslog qw( :standard :macros );
+use Capture::Tiny qw ( :all );
+
+sub load_module {
+	for (@_) {
+		(my $file = "$_.pm") =~ s{::}{/}g;
+		require $file;
+		import $_;
+	}
+}
+
 
 sub source_environment {
 	my $name = shift;
@@ -60,6 +74,7 @@ sub source_environment {
 	}
 }
 
+
 # Over-zealous string sanitizer that makes perl strict and  perl -T happy...
 sub sanitizer {
 	my $type   = $_[0];
@@ -96,6 +111,7 @@ sub sanitizer {
 	}
 }
 
+
 sub clups {
 	my $string = "@_";
 	$string =~ s/\n//g;
@@ -104,17 +120,20 @@ sub clups {
 	return $string;
 }
 
+
 sub system_capture_stdout_output {
 	my $cmd = shift;
 	my @args = @_;
+	syslog("debug", "executing external command ,,$cmd'' with args: ".join(",", @args));
 	return capture_stdout { system( $cmd, @args ); };
 }
 
+
 sub system_capture_merged_output {
 	my $cmd = shift;
 	my @args = @_;
+	syslog("debug", "executing external command ,,$cmd'' with args: ".join(",", @args));
 	return capture_merged { system( $cmd, @args ); };
 }
 
-
 1;
diff --git a/debian/changelog b/debian/changelog
index 979576c..16b9851 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -39,6 +39,9 @@ x2goserver (4.1.0.0-0x2go1) UNRELEASED; urgency=low
       calls.
     - Avoid one argument system calls and backticks in SupeReNicer.
     - Handle situations in SupeReNicer where the agent PID is not set.
+    - Start working on an abstraction layer (as Perl
+      package X2Go::Server::Agent) that handles all (NX) agent specific actions.
+      Move duplicate code into that new Perl package.
   * debian/control:
     + Package X2Go::Log in separate package: libx2go-log-perl.
     + Package X2Go::Server::DB in separate package: libx2go-server-db-perl.
diff --git a/debian/libx2go-server-perl.install b/debian/libx2go-server-perl.install
index 1ff3e8d..2ba83aa 100644
--- a/debian/libx2go-server-perl.install
+++ b/debian/libx2go-server-perl.install
@@ -2,7 +2,11 @@ usr/share/perl5/X2Go/Config.pm
 usr/share/perl5/X2Go/Server.pm
 usr/share/perl5/X2Go/SupeReNicer.pm
 usr/share/perl5/X2Go/Utils.pm
+usr/share/perl5/X2Go/Server/Agent*
+usr/share/perl5/X2Go/Utils.pm
 usr/share/man/man3/X2Go::Config.*
 usr/share/man/man3/X2Go::Server.*
 usr/share/man/man3/X2Go::SupeReNicer.*
 usr/share/man/man3/X2Go::Utils.*
+usr/share/man/man3/X2Go::Server::Agent.*
+usr/share/man/man3/X2Go::Server::Agent::*
diff --git a/x2goserver.spec b/x2goserver.spec
index 59edf21..5875999 100644
--- a/x2goserver.spec
+++ b/x2goserver.spec
@@ -416,10 +416,13 @@ exit 0
 %{perl_vendorlib}/X2Go/Server.pm
 %{perl_vendorlib}/X2Go/SupeReNicer.pm
 %{perl_vendorlib}/X2Go/Utils.pm
+%{perl_vendorlib}/X2Go/Server/Agent*
 %{_mandir}/man3/X2Go::Config.*
 %{_mandir}/man3/X2Go::Server.*
 %{_mandir}/man3/X2Go::SupeReNicer.*
 %{_mandir}/man3/X2Go::Utils.*
+%{_mandir}/man3/X2Go::Agent.*
+%{_mandir}/man3/X2Go::Agent::*
 
 
 %files -n perl-X2Go-Server-DB
diff --git a/x2goserver/bin/x2golistsessions b/x2goserver/bin/x2golistsessions
index 2a9e548..6f44f56 100755
--- a/x2goserver/bin/x2golistsessions
+++ b/x2goserver/bin/x2golistsessions
@@ -27,6 +27,7 @@ use Sys::Syslog qw( :standard :macros );
 use File::ReadBackwards;
 
 use X2Go::Server::DB qw(db_listsessions db_listsessions_all db_changestatus);
+use X2Go::Server::Agent qw(session_is_suspended);
 use X2Go::Log qw(loglevel);
 
 openlog($0,'cons,pid','user');
@@ -40,25 +41,6 @@ if ( @ARGV ) {
 }
 
 
-sub is_suspended
-{
-	my $sess=shift;
-	my $log="$ENV{'HOME'}/.x2go/C-${sess}.log";
-	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;
-	}
-	return 0;
-}
-
-
 my $serv=shift;
 if( ! $serv)
 {
@@ -88,7 +70,7 @@ for (my $i=0;$i<@outp;$i++)
 	{ 
 		if (@sinfo[4]eq 'R')
 		{
-			if(is_suspended(@sinfo[1]))
+			if(session_is_suspended(@sinfo[1]), @sinfo[11])
 			{
 				db_changestatus( 'S', @sinfo[1] );
 				@outp[$i] =~ s/\|R\|/\|S\|/;
diff --git a/x2goserver/bin/x2golistshadowsessions b/x2goserver/bin/x2golistshadowsessions
index 163dcbc..7880d53 100755
--- a/x2goserver/bin/x2golistshadowsessions
+++ b/x2goserver/bin/x2golistshadowsessions
@@ -27,6 +27,7 @@ use Sys::Syslog qw( :standard :macros );
 use File::ReadBackwards;
 
 use X2Go::Server::DB qw(db_listshadowsessions db_listshadowsessions_all);
+use X2Go::Server::Agent qw(session_is_suspended);
 use X2Go::Log qw(loglevel);
 
 openlog($0,'cons,pid','user');
@@ -40,25 +41,6 @@ if ( @ARGV ) {
 }
 
 
-sub is_suspended
-{
-        my $sess=shift;
-        my $log="$ENV{'HOME'}/.x2go/C-${sess}.log";
-        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;
-        }
-        return 0;
-}
-
-
 my $serv=shift;
 if( ! $serv)
 {
@@ -88,7 +70,7 @@ for (my $i=0;$i<@outp;$i++)
 	{ 
 		if (@sinfo[4]eq 'R')
 		{
-			if(is_suspended(@sinfo[1]))
+			if(session_is_suspended(@sinfo[1]), @sinfo[11])
 			{
 				db_changestatus( 'S', @sinfo[1] );
 				@outp[$i] =~ s/\|R\|/\|S\|/;
diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions
index 8daffcd..797c5cd 100755
--- a/x2goserver/sbin/x2gocleansessions
+++ b/x2goserver/sbin/x2gocleansessions
@@ -33,6 +33,8 @@ my $x2go_lib_path = `x2gopath libexec`;
 use X2Go::Config qw( get_config );
 use X2Go::Log qw( loglevel );
 use X2Go::SupeReNicer qw( superenice );
+use X2Go::Server::Agent qw( session_is_suspended session_is_running session_has_terminated );
+use X2Go::Server::DB qw( dbsys_rmsessionsroot );
 
 openlog($0,'cons,pid','user');
 setlogmask( LOG_UPTO(loglevel()) );
@@ -56,55 +58,6 @@ sub check_pid
 	return 0;
 }
 
-sub has_terminated
-{
-	my $sess=shift;
-	my $user=shift;
-	my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
-	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;
-	}
-	return 0;
-}
-
-sub is_suspended
-{
-	my $sess=shift;
-	my $user=shift;
-	my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
-	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;
-	}
-	return 0;
-}
-
-sub is_running
-{
-	my $sess=shift;
-	my $user=shift;
-	if (!is_suspended($sess, $user) && !has_terminated($sess, $user))
-	{
-		return 1;
-	}
-	return 0;
-}
-
 sub catch_term
 {
 	unlink("/var/run/x2goserver.pid");
@@ -180,6 +133,13 @@ elsif ($pid == 0 )
 
 			my @sinfo=split('\\|',"@outp[$i]");
 
+			# clean up invalid sessions from the session
+			if ( ( ! @sinfo[0] ) && ( $remembered_sessions_since{ @sinfo[1] } ge 10 ) )
+			{
+				dbsys_rmsessionsroot(@sinfo[1]);
+				next;
+			}
+
 			if (defined $remembered_sessions_since{ @sinfo[1] } && ($remembered_sessions_status{ @sinfo[1] } =~m/@sinfo[4]/ ))
 			{
 				$remembered_sessions_since{ @sinfo[1] } += 2;
@@ -215,7 +175,7 @@ elsif ($pid == 0 )
 			{
 				if ( (@sinfo[4] eq 'R') && ( $remembered_sessions_since{ @sinfo[1] } ge 2 ))
 				{
-					if (is_suspended(@sinfo[1], at sinfo[11]))
+					if (session_is_suspended(@sinfo[1], at sinfo[11]))
 					{
 						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");
@@ -225,7 +185,7 @@ elsif ($pid == 0 )
 				}
 				if (@sinfo[4] eq 'S')
 				{
-					if (is_running(@sinfo[1], at sinfo[11]))
+					if (session_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]");
@@ -235,7 +195,7 @@ elsif ($pid == 0 )
 				}
 				if (@sinfo[4] eq 'T')
 				{
-					if (!has_terminated(@sinfo[1], at sinfo[11]))
+					if (!session_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]");
diff --git a/x2goserver/sbin/x2golistsessions_root b/x2goserver/sbin/x2golistsessions_root
index 3ae90e2..b4c659c 100755
--- a/x2goserver/sbin/x2golistsessions_root
+++ b/x2goserver/sbin/x2golistsessions_root
@@ -26,30 +26,13 @@ use Sys::Syslog qw( :standard :macros );
 use File::ReadBackwards;
 
 use X2Go::Log qw(loglevel);
+use X2Go::Utils qw(system_capture_stdout_output);
+use X2Go::Server::Agent qw(session_is_suspended);
 
 openlog($0,'cons,pid','user');
 setlogmask( LOG_UPTO(loglevel()) );
 
-sub is_suspended
-{
-	my $sess=shift;
-	my $user=shift;
-	my $log="/tmp/.x2go-${user}/session-C-${sess}.log";
-	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;
-	}
-	return 0;
-}
-
-my $x2go_lib_path = `x2gopath libexec`;
+my $x2go_lib_path = system_capture_stdout_output("x2gopath", "libexec");
 
 my $uname;
 
@@ -59,7 +42,7 @@ if ( ! $serv)
 	$serv=hostname;
 }
 
-my $outp=`$x2go_lib_path/x2golistsessions_sql $serv 2>/dev/null`;
+my $outp=system_capture_stdout_output("$x2go_lib_path/x2golistsessions_sql","$serv");
 
 my @outp=split("\n","$outp");
 
@@ -74,7 +57,7 @@ for (my $i=0;$i<@outp;$i++)
 	{ 
 		if (@sinfo[4]eq 'R')
 		{
-			if (is_suspended(@sinfo[1], at sinfo[11]))
+			if (session_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