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

X2Go dev team git-admin at x2go.org
Fri Jan 3 20:51:39 CET 2014


The branch, build-baikal 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 -----------------------------------------------------------------
-----------------------------------------------------------------------

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