[X2go-Commits] x2goserver.git - master (branch) updated: 3.1.1.3-121-gd2e3018

X2Go dev team git-admin at x2go.org
Sat Jan 19 15:52:59 CET 2013


The branch, master has been updated
       via  d2e3018311a85734001bde6da8cbff6a060d3c4c (commit)
      from  58e58ea304d91945a96e1757b419283ac696c830 (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 d2e3018311a85734001bde6da8cbff6a060d3c4c
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Jan 19 15:52:59 2013 +0100

    Add X2Go Server feature X2GO_LIST_SHADOWSESSIONS.

-----------------------------------------------------------------------

Summary of changes:
 X2Go/Server/DB.pm                                  |   25 +++++++++
 X2Go/Server/DB/PostgreSQL.pm                       |   49 ++++++++++++++++-
 X2Go/Server/DB/SQLite3.pm                          |   53 ++++++++++++++++++-
 debian/changelog                                   |    1 +
 .../lib/libx2go-server-db-sqlite3-wrapper.pl       |    2 +-
 .../{x2golistsessions => x2golistshadowsessions}   |   34 ++++++------
 x2goserver/man/man8/x2golistshadowsessions.8       |   55 ++++++++++++++++++++
 x2goserver/share/x2gofeature.d/x2goserver.features |    1 +
 8 files changed, 199 insertions(+), 21 deletions(-)
 copy x2goserver/bin/{x2golistsessions => x2golistshadowsessions} (74%)
 create mode 100644 x2goserver/man/man8/x2golistshadowsessions.8

The diff of changes is:
diff --git a/X2Go/Server/DB.pm b/X2Go/Server/DB.pm
index c9a83a1..c87334d 100644
--- a/X2Go/Server/DB.pm
+++ b/X2Go/Server/DB.pm
@@ -424,3 +424,28 @@ sub db_listsessions_all
 		return split("\n",`$x2go_lib_path/libx2go-server-db-sqlite3-wrapper listsessions_all`);
 	}
 }
+
+sub db_listshadowsessions
+{
+	my $server=shift or die "argument \"server\" missed";
+	if ($backend eq 'postgres')
+	{
+		return X2Go::Server::DB::PostgreSQL::db_listshadowsessions($server);
+	}
+	if ($backend eq 'sqlite')
+	{
+		return split("\n",`$x2go_lib_path/libx2go-server-db-sqlite3-wrapper listshadowsessions $server`);
+	}
+}
+
+sub db_listshadowsessions_all
+{
+	if($backend eq 'postgres')
+	{
+		return X2Go::Server::DB::PostgreSQL::db_listshadowsessions_all();
+	}
+	if ($backend eq 'sqlite')
+	{
+		return split("\n",`$x2go_lib_path/libx2go-server-db-sqlite3-wrapper listshadowsessions_all`);
+	}
+}
diff --git a/X2Go/Server/DB/PostgreSQL.pm b/X2Go/Server/DB/PostgreSQL.pm
index 72ba833..f1233e9 100644
--- a/X2Go/Server/DB/PostgreSQL.pm
+++ b/X2Go/Server/DB/PostgreSQL.pm
@@ -45,7 +45,7 @@ use base 'Exporter';
 our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus', 
              'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount', 
              'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', 
-             'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts');
+             'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts', 'db_listshadowsessions','db_listshadowsessions_all');
 
 my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid(getuid());
 
@@ -493,4 +493,51 @@ sub db_listsessions_all
 	return @sessions;
 }
 
+sub db_listshadowsessions
+{
+	init_db();
+	my $server=shift or die "argument \"server\" missed";
+	my @sessions;
+	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,'YYYY-MM-DDTHH24:MI:SS'), cookie, client, gr_port,
+	                      sound_port, to_char( last_time, 'YYYY-MM-DDTHH24:MI:SS'), uname,
+	                      to_char(now()- init_time,'SSSS'), fs_port from  sessions_view
+	                      where status !='F' and server='$server' and  
+	                      (session_id like '%XSHAD%') order by status desc");
+	$sth->execute() or die;
+	my @data;
+	my $i=0;
+	while (@data = $sth->fetchrow_array) 
+	{
+		@sessions[$i++]=join('|', at data);
+	}
+	$sth->finish();
+	$dbh->disconnect();
+	return @sessions;
+}
+
+sub db_listshadowsessions_all
+{
+	init_db();
+	my @sessions;
+	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,'YYYY-MM-DDTHH24:MI:SS'), cookie, client, gr_port,
+	                      sound_port, to_char( last_time, 'YYYY-MM-DDTHH24:MI:SS'), uname,
+	                      to_char(now()- init_time,'SSSS'), fs_port from  sessions_view
+	                      where status !='F'  and  
+	                      (session_id is like '%XSHAD%') order by status desc");
+	$sth->execute()or die;
+	my @data;
+	my $i=0;
+	while (@data = $sth->fetchrow_array) 
+	{
+		@sessions[$i++]=join('|', at data);
+	}
+	$sth->finish();
+	$dbh->disconnect();
+	return @sessions;
+}
+
 1;
diff --git a/X2Go/Server/DB/SQLite3.pm b/X2Go/Server/DB/SQLite3.pm
index 6abdb82..b615c76 100644
--- a/X2Go/Server/DB/SQLite3.pm
+++ b/X2Go/Server/DB/SQLite3.pm
@@ -54,8 +54,8 @@ use base 'Exporter';
 
 our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus', 
              'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount', 
-             'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', 
-             'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts');
+             'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot',.
+             'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts', 'db_listshadowsessions','db_listshadowsessions_all', );
 
 sub init_db
 {
@@ -509,6 +509,55 @@ sub db_listsessions_all
 	return @sessions;
 }
 
+sub db_listshadowsessions
+{
+	my $dbh = init_db();
+	my $server=shift or die "argument \"server\" missed";
+	my @strings;
+	my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
+	                       strftime('%Y-%m-%dT%H:%M:%S',init_time),
+	                       cookie,client,gr_port,sound_port,
+	                       strftime('%Y-%m-%dT%H:%M:%S',last_time),
+	                       uname,
+	                       strftime('%s','now','localtime') - strftime('%s',init_time),fs_port from  sessions
+	                       where status !='F' and server=? and uname=?
+	                       and  (  session_id like '%XSHAD%')  order by status desc");
+	$sth->execute($server, $realuser);
+	if ($sth->err())
+	{
+		syslog('error', "listsessions (SQLite3 session db backend) failed with exitcode: $sth->err()");
+		die();
+	}
+	my @sessions = fetchrow_array_datasets($sth);
+	$sth->finish();
+	$dbh->disconnect();
+	return @sessions;
+}
+
+sub db_listshadowsessions_all
+{
+	my $dbh = init_db();
+	my @strings;
+	my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
+	                       strftime('%Y-%m-%dT%H:%M:%S',init_time),
+	                       cookie,client,gr_port,sound_port,
+	                       strftime('%Y-%m-%dT%H:%M:%S',last_time),
+	                       uname,
+	                       strftime('%s','now','localtime') - strftime('%s',init_time),fs_port from  sessions 
+	                       where status !='F' and uname=? and  (  session_id like '%XSHAD%')  order by status desc");
+	
+	$sth->execute($realuser);
+	if ($sth->err())
+	{
+		syslog('error', "listsessions_all (SQLite3 session db backend) failed with exitcode: $sth->err()");
+		die();
+	}
+	my @sessions = fetchrow_array_datasets($sth);
+	$sth->finish();
+	$dbh->disconnect();
+	return @sessions;
+}
+
 sub check_root
 {
 	if ($realuser ne "root")
diff --git a/debian/changelog b/debian/changelog
index 4349cbf..f4ab554 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -18,6 +18,7 @@ x2goserver (4.1.0.0-0~x2go1) UNRELEASED; urgency=low
     - Make session type label XFCE a valid session that starts xfce4-session.
     - Fix failures of x2gogetagent that was related to faulty regexp in
       SQLite3 DB wrapper script.
+    - Add X2Go Server feature X2GO_LIST_SHADOWSESSIONS.
   * /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/libx2go-server-db-perl/lib/libx2go-server-db-sqlite3-wrapper.pl b/libx2go-server-db-perl/lib/libx2go-server-db-sqlite3-wrapper.pl
index 751aa69..97c63fd 100755
--- a/libx2go-server-db-perl/lib/libx2go-server-db-sqlite3-wrapper.pl
+++ b/libx2go-server-db-perl/lib/libx2go-server-db-sqlite3-wrapper.pl
@@ -55,7 +55,7 @@ my $cmd=shift or die "command not specified";
 switch ($cmd)
 {
 	case /.*listsessions.*root/              { @result_list = eval("X2Go::Server::DB::SQLite3::dbsys_$cmd(\@ARGV)") }
-	case /.*(listsessions|getmounts).*/      { @result_list = eval("X2Go::Server::DB::SQLite3::db_$cmd(\@ARGV)") }
+	case /.*(list.*sessions|getmounts).*/    { @result_list = eval("X2Go::Server::DB::SQLite3::db_$cmd(\@ARGV)") }
 	case /.*root/                            { $result = eval("X2Go::Server::DB::SQLite3::dbsys_$cmd(\@ARGV)") }
 	else                                     { $result = eval("X2Go::Server::DB::SQLite3::db_$cmd(\@ARGV)") }
 }
diff --git a/x2goserver/bin/x2golistsessions b/x2goserver/bin/x2golistshadowsessions
similarity index 74%
copy from x2goserver/bin/x2golistsessions
copy to x2goserver/bin/x2golistshadowsessions
index 75ff45a..46893ce 100755
--- a/x2goserver/bin/x2golistsessions
+++ b/x2goserver/bin/x2golistshadowsessions
@@ -24,30 +24,30 @@ use strict;
 use Sys::Hostname;
 use Sys::Syslog qw( :standard :macros );
 
-use X2Go::Server::DB qw(db_listsessions db_listsessions_all);
+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', "x2golistsessions has been called with options: @ARGV");
+	syslog('info', "x2golistshadowsessions has been called with options: @ARGV");
 } else {
-	# hiding normal x2golistsessions calls into debug loglevel
-	syslog('debug', "x2golistsessions has been called with no option");
+	# hiding normal x2golistshadowsessions calls into debug loglevel
+	syslog('debug', "x2golistshadowsessions has been called with no option");
 }
 
-sub check_stat
-{
-	my $sess=shift;
-	my $log="$ENV{'HOME'}/.x2go/C-$sess/session.log";
-	my $text=`tail -1 $log 2>/dev/null`;
-	if ($text =~ m/Session suspended/)
-	{
-		return 0;
-	}
-	return 1;
-}
+#sub check_stat
+#{
+#	my $sess=shift;
+#	my $log="$ENV{'HOME'}/.x2go/C-$sess/session.log";
+#	my $text=`tail -1 $log 2>/dev/null`;
+#	if ($text =~ m/Session suspended/)
+#	{
+#		return 0;
+#	}
+#	return 1;
+#}
 
 my $serv=shift;
 if( ! $serv)
@@ -58,11 +58,11 @@ if( ! $serv)
 my @outp;
 if($serv eq "--all-servers")
 {
-	@outp=db_listsessions_all();
+	@outp=db_listshadowsessions_all();
 }
 else
 {
-	@outp=db_listsessions($serv);
+	@outp=db_listshadowsessions($serv);
 }
 
 for (my $i=0;$i<@outp;$i++)
diff --git a/x2goserver/man/man8/x2golistshadowsessions.8 b/x2goserver/man/man8/x2golistshadowsessions.8
new file mode 100644
index 0000000..b832147
--- /dev/null
+++ b/x2goserver/man/man8/x2golistshadowsessions.8
@@ -0,0 +1,55 @@
+'\" -*- coding: utf-8 -*-
+.if \n(.g .ds T< \\FC
+.if \n(.g .ds T> \\F[\n[.fam]]
+.de URL
+\\$2 \(la\\$1\(ra\\$3
+..
+.if \n(.g .mso www.tmac
+.TH x2golistshadowsessions 8 "Jan 2013" "Version 4.0.x.y" "X2Go Server Tool"
+.SH NAME
+x2golistshadowsessions \- List Available X2Go Shadow Sessions for User
+.SH SYNOPSIS
+'nh
+.fi
+.ad l
+x2golistshadowsessions [<server_hostname>|--all-servers]
+
+.SH DESCRIPTION
+\fBx2golistshadowsessions\fR returns a list of running or suspended X2Go shadow sessions
+(sessions that provide the X2Go Desktop Sharing feature) for X2Go server <server_hostname>.
+If no server hostname is given at the command line, the shadow session list query runs for the local system.
+.PP
+\fBx2golistshadowsessions\fR is run with normal user privileges and it is used by X2Go clients to render
+a list of available X2Go shadow sessions.
+.SH X2GO CLUSTER MODE
+If \fBx2golistshadowsessions\fR is executed with the \fI--all-servers\fR option then the central database
+of your X2Go cluster is queried for running/suspended shadow sessions belonging to the user executing this command.
+These sessions may be active on any of the X2Go servers within your cluster.
+.SH RETURN VALUES
+A line-by-line list of available X2Go sessions. Each line consists of several session attribute fields separated by the pipe
+symbol (,,|'').
+.PP
+The meaning of the session attributes of each output line are shown below:
+
+  field 01: <agent_pid>
+  field 02: <session_id>
+  field 03: <port>
+  field 04: <host>
+  field 05: <state>
+  field 06: <init_time>
+  field 07: <session_cookie>
+  field 08: <client_ip>
+  field 09: <gr_port>
+  field 10: <snd_port>
+  field 11: <last_time>
+  field 12: <user>
+  field 13: <age_in_secs>
+  field 14: <sshfs_port>
+
+.PP
+As exitcode \fBx2golistshadowsessions\fR always returns 0.
+.SH SEE ALSO
+x2golistsessions(8), x2golistdesktops(8), x2goresume-session(8), x2gosuspend-session(8), x2goterminate-session(8)
+.SH AUTHOR
+This manual has been written by Mike Gabriel <mike.gabriel at das-netzwerkteam.de> for the X2Go project
+(http://www.x2go.org).
diff --git a/x2goserver/share/x2gofeature.d/x2goserver.features b/x2goserver/share/x2gofeature.d/x2goserver.features
index 1d23695..5e4ce76 100755
--- a/x2goserver/share/x2gofeature.d/x2goserver.features
+++ b/x2goserver/share/x2gofeature.d/x2goserver.features
@@ -36,6 +36,7 @@ case "$X2GO_FEATURE" in
     "X2GO_PUBLISHED_APPLICATIONS") echo "ok"; exit 0;;
     "X2GO_SERVERSIDE_DESKTOPCOMMANDS") echo "ok"; exit 0;;
     "X2GO_SET_KEYBOARD") echo "ok"; exit 0;;
+    "X2GO_LIST_SHADOWSESSIONS") echo "ok"; exit 0;;
     *) exit -1;;
 
 esac


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