[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:53:19 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