[X2Go-Commits] [x2goserver] 01/01: Add tunneling port allocation for TeleKinesis framework.
git-admin at x2go.org
git-admin at x2go.org
Sun Apr 27 10:30:19 CEST 2014
This is an automated email from the git hooks/post-receive script.
x2go pushed a commit to branch master
in repository x2goserver.
commit ae9da463efbb01d58333243cc3b8a5ecffbc65c0
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date: Sat Mar 29 00:00:42 2014 +0100
Add tunneling port allocation for TeleKinesis framework.
---
X2Go/Server/DB.pm | 16 +++++----
X2Go/Server/DB/PostgreSQL.pm | 25 +++++++++----
X2Go/Server/DB/SQLite3.pm | 31 +++++++++++-----
X2Go/Utils.pm | 6 ++++
debian/changelog | 1 +
debian/control | 1 +
x2goserver-common/etc/x2goserver.conf | 5 +++
x2goserver.spec | 1 +
x2goserver/bin/x2goresume-session | 36 ++++++++++++++++---
x2goserver/bin/x2gostartagent | 20 +++++++++--
x2goserver/lib/x2gocreatesession | 4 ++-
x2goserver/lib/x2goresume | 5 +--
x2goserver/sbin/x2godbadmin | 64 ++++++++++++++++++++++++++++++---
13 files changed, 179 insertions(+), 36 deletions(-)
diff --git a/X2Go/Server/DB.pm b/X2Go/Server/DB.pm
index 4682cc4..18bba34 100644
--- a/X2Go/Server/DB.pm
+++ b/X2Go/Server/DB.pm
@@ -240,20 +240,22 @@ sub db_createsession
my $gr_port=shift or die"argument \"gr_port\" missed";
my $snd_port=shift or die"argument \"snd_port\" missed";
my $fs_port=shift or die"argument \"fs_port\" missed";
+ my $tekictrl_port=shift or die"argument \"tekictrl_port\" missed";
+ my $tekidata_port=shift or die"argument \"tekidata_port\" missed";
my $sid=shift or die "argument \"session_id\" missed";
if ($backend eq 'postgres')
{
- X2Go::Server::DB::PostgreSQL::db_createsession($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $sid);
+ X2Go::Server::DB::PostgreSQL::db_createsession($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid);
}
if ($backend eq 'sqlite')
{
- my $err= system_capture_merged_output("$x2go_lib_path/libx2go-server-db-sqlite3-wrapper", "createsession", "$cookie", "$pid", "$client", "$gr_port", "$snd_port", "$fs_port", "$sid");
+ my $err= system_capture_merged_output("$x2go_lib_path/libx2go-server-db-sqlite3-wrapper", "createsession", "$cookie", "$pid", "$client", "$gr_port", "$snd_port", "$fs_port", "$tekictrl_port", "$tekidata_port", "$sid");
if ($err ne "ok")
{
die $err;
}
}
- syslog('debug', "db_createsession called, session ID: $sid, cookie: $cookie, client: $client, pid: $pid, graphics port: $gr_port, sound port: $snd_port, file sharing port: $fs_port");
+ syslog('debug', "db_createsession called, session ID: $sid, cookie: $cookie, client: $client, pid: $pid, graphics port: $gr_port, sound port: $snd_port, file sharing port: $fs_port. telekinesis ctrl port: $tekictrl_port, telekinesis data port: $tekidata_port");
}
sub db_createshadowsession
@@ -325,15 +327,17 @@ sub db_resume
my $gr_port=shift or die "argument \"gr_port\" missed";
my $snd_port=shift or die "argument \"snd_port\" missed";
my $fs_port=shift or die "argument \"fs_port\" missed";
+ my $tekictrl_port=shift or die"argument \"tekictrl_port\" missed";
+ my $tekidata_port=shift or die"argument \"tekidata_port\" missed";
if ($backend eq 'postgres')
{
- X2Go::Server::DB::PostgreSQL::db_resume($client, $sid, $gr_port, $snd_port, $fs_port);
+ X2Go::Server::DB::PostgreSQL::db_resume($client, $sid, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port);
}
if ($backend eq 'sqlite')
{
- system_capture_merged_output("$x2go_lib_path/libx2go-server-db-sqlite3-wrapper", "resume", "$client", "$sid", "$gr_port", "$snd_port", "$fs_port");
+ system_capture_merged_output("$x2go_lib_path/libx2go-server-db-sqlite3-wrapper", "resume", "$client", "$sid", "$gr_port", "$snd_port", "$fs_port", "$tekictrl_port", "$tekidata_port");
}
- syslog('debug', "db_resume called, session ID: $sid, client: $client, gr_port: $gr_port, sound_port: $snd_port, fs_port: $fs_port");
+ syslog('debug', "db_resume called, session ID: $sid, client: $client, gr_port: $gr_port, sound_port: $snd_port, fs_port: $fs_port, telekinesis ctrl port: $tekictrl_port, telekinesis data port: $tekidata_port");
}
sub db_changestatus
diff --git a/X2Go/Server/DB/PostgreSQL.pm b/X2Go/Server/DB/PostgreSQL.pm
index 8e0657a..6f46b64 100644
--- a/X2Go/Server/DB/PostgreSQL.pm
+++ b/X2Go/Server/DB/PostgreSQL.pm
@@ -139,7 +139,7 @@ sub dbsys_listsessionsroot
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
to_char(init_time,'YYYY-MM-DD\"T\"HH24:MI:SS'),cookie,client,gr_port,
sound_port,to_char(last_time,'YYYY-MM-DD\"T\"HH24:MI:SS'),uname,
- to_char(now()-init_time,'SSSS'),fs_port from sessions
+ to_char(now()-init_time,'SSSS'),fs_port,tekictrl_port,tekidata_port from sessions
where server='$server' order by status desc");
$sth->execute()or die;
my @data;
@@ -161,7 +161,7 @@ sub dbsys_listsessionsroot_all
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
to_char(init_time,'YYYY-MM-DD\"T\"HH24:MI:SS'),cookie,client,gr_port,
sound_port,to_char(last_time,'YYYY-MM-DD\"T\"HH24:MI:SS'),uname,
- to_char(now()-init_time,'SSSS'),fs_port from sessions
+ to_char(now()-init_time,'SSSS'),fs_port,tekictrl_port,tekidata_port from sessions
order by status desc");
$sth->execute()or die;
my @data;
@@ -292,12 +292,18 @@ sub db_createsession
$snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed";
my $fs_port=shift or die"argument \"fs_port\" missed";
$fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed";
+ my $tekictrl_port=shift or die"argument \"tekictrl_port\" missed";
+ $tekictrl_port = sanitizer('num', $tekictrl_port) or die "argument \"tekictrl_port\" malformed";
+ my $tekidata_port=shift or die"argument \"tekidata_port\" missed";
+ $tekidata_port = sanitizer('num', $tekidata_port) or die "argument \"tekidata_port\" malformed";
my $sid=shift or die "argument \"session_id\" missed";
$sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed";
my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_;
my $sth=$dbh->prepare("update sessions_view set status='R',last_time=now(),
cookie='$cookie',agent_pid='$pid',client='$client',gr_port='$gr_port',
- sound_port='$snd_port',fs_port='$fs_port' where session_id='$sid'");
+ sound_port='$snd_port',fs_port='$fs_port',tekictrl_port='$tekictrl_port',
+ tekidata_port='$tekidata_port'
+ where session_id='$sid'");
$sth->execute()or die;
$sth->finish();
$dbh->disconnect();
@@ -343,9 +349,14 @@ sub db_resume
$snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed";
my $fs_port=shift or die "argument \"fs_port\" missed";
$fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed";
+ my $tekictrl_port=shift or die"argument \"tekictrl_port\" missed";
+ $tekictrl_port = sanitizer('num', $tekictrl_port) or die "argument \"tekictrl_port\" malformed";
+ my $tekidata_port=shift or die"argument \"tekidata_port\" missed";
+ $tekidata_port = sanitizer('num', $tekidata_port) or die "argument \"tekidata_port\" malformed";
my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_;
my $sth=$dbh->prepare("update sessions_view set last_time=now(),status='R',client='$client',gr_port='$gr_port',
- sound_port='$snd_port',fs_port='$fs_port' where session_id = '$sid'");
+ sound_port='$snd_port',fs_port='$fs_port',tekictrl_port='$tekictrl_port',
+ tekidata_port='$tekidata_port' where session_id = '$sid'");
$sth->execute()or die;
$sth->finish();
$dbh->disconnect();
@@ -492,8 +503,8 @@ sub db_listsessions
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
to_char(init_time,'YYYY-MM-DD\"T\"HH24:MI:SS'), cookie, client, gr_port,
sound_port, to_char( last_time, 'YYYY-MM-DD\"T\"HH24:MI:SS'), uname,
- to_char(now()- init_time,'SSSS'), fs_port from sessions_view
- where status !='F' and server='$server' and
+ to_char(now()- init_time,'SSSS'), fs_port, tekictrl_port, tekidata_port from sessions_view
+ where status !='F' and server='$server' and
(session_id not like '%XSHAD%') order by status desc");
$sth->execute() or die;
my @data;
@@ -515,7 +526,7 @@ sub db_listsessions_all
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
to_char(init_time,'YYYY-MM-DD\"T\"HH24:MI:SS'), cookie, client, gr_port,
sound_port, to_char( last_time, 'YYYY-MM-DD\"T\"HH24:MI:SS'), uname,
- to_char(now()- init_time,'SSSS'), fs_port from sessions_view
+ to_char(now()- init_time,'SSSS'), fs_port, tekictrl_port, tekidata_port from sessions_view
where status !='F' and
(session_id not like '%XSHAD%') order by status desc");
$sth->execute()or die;
diff --git a/X2Go/Server/DB/SQLite3.pm b/X2Go/Server/DB/SQLite3.pm
index 9acecde..bde6edf 100644
--- a/X2Go/Server/DB/SQLite3.pm
+++ b/X2Go/Server/DB/SQLite3.pm
@@ -41,8 +41,9 @@ use POSIX;
#### It is intended that the code in this package cannot do system() calls.
use Sys::Syslog qw( :standard :macros );
+use X2Go::Config qw( get_config );
use X2Go::Log qw( loglevel );
-use X2Go::Utils qw( sanitizer );
+use X2Go::Utils qw( sanitizer is_true );
openlog($0,'cons,pid','user');
setlogmask( LOG_UPTO(loglevel()) );
@@ -95,7 +96,8 @@ sub dbsys_listsessionsroot
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
+ strftime('%s','now','localtime') - strftime('%s',init_time),fs_port,
+ tekictrl_port, tekidata_port from sessions
where server=? order by status desc");
$sth->execute($server);
if ($sth->err()) {
@@ -118,7 +120,8 @@ sub dbsys_listsessionsroot_all
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
+ strftime('%s','now','localtime') - strftime('%s',init_time),fs_port,
+ tekictrl_port, tekidata_port from sessions
order by status desc");
$sth->execute();
if ($sth->err())
@@ -258,12 +261,16 @@ sub db_createsession
$snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed";
my $fs_port=shift or die"argument \"fs_port\" missed";
$fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed";
+ my $tekictrl_port=shift or die "argument \"tekictrl_port\" missed";
+ $tekictrl_port = sanitizer('pnnum', $tekictrl_port) or die "argument \"tekictrl_port\" malformed";
+ my $tekidata_port=shift or die "argument \"tekidata_port\" missed";
+ $tekidata_port = sanitizer('pnnum', $tekidata_port) or die "argument \"tekidata_port\" malformed";
my $sid=shift or die "argument \"session_id\" missed";
$sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed";
check_user($sid);
my $sth=$dbh->prepare("update sessions set status='R',last_time=datetime('now','localtime'),cookie=?,agent_pid=?,
- client=?,gr_port=?,sound_port=?,fs_port=? where session_id=? and uname=?");
- $sth->execute($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $sid, $realuser);
+ client=?,gr_port=?,sound_port=?,fs_port=?,tekictrl_port=?,tekidata_port=? where session_id=? and uname=?");
+ $sth->execute($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid, $realuser);
if ($sth->err())
{
syslog('error', "createsession (SQLite3 session db backend) failed with exitcode: $sth->err()");
@@ -355,10 +362,14 @@ sub db_resume
$snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed";
my $fs_port=shift or die "argument \"fs_port\" missed";
$fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed";
+ my $tekictrl_port=shift or die"argument \"tekictrl_port\" missed";
+ $tekictrl_port = sanitizer('pnnum', $tekictrl_port) or die "argument \"tekictrl_port\" malformed";
+ my $tekidata_port=shift or die"argument \"tekidata_port\" missed";
+ $tekidata_port = sanitizer('pnnum', $tekidata_port) or die "argument \"tekidata_port\" malformed";
check_user($sid);
my $sth=$dbh->prepare("update sessions set last_time=datetime('now','localtime'),status='R',
- client=?,gr_port=?,sound_port=?,fs_port=? where session_id = ? and uname=?");
- $sth->execute($client, $gr_port, $snd_port, $fs_port, $sid, $realuser);
+ client=?,gr_port=?,sound_port=?,fs_port=?,tekictrl_port=?,tekidata_port=? where session_id = ? and uname=?");
+ $sth->execute($client, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid, $realuser);
if ($sth->err())
{
syslog('error', "resume (SQLite3 session db backend) failed with exitcode: $sth->err()");
@@ -542,7 +553,8 @@ sub db_listsessions
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
+ strftime('%s','now','localtime') - strftime('%s',init_time),fs_port,
+ tekictrl_port,tekidata_port from sessions
where status !='F' and server=? and uname=?
and ( session_id not like '%XSHAD%') order by status desc");
$sth->execute($server, $realuser);
@@ -566,7 +578,8 @@ sub db_listsessions_all
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
+ strftime('%s','now','localtime') - strftime('%s',init_time),fs_port,
+ tekictrl_port,tekidata_port from sessions
where status !='F' and uname=? and ( session_id not like '%XSHAD%') order by status desc");
$sth->execute($realuser);
diff --git a/X2Go/Utils.pm b/X2Go/Utils.pm
index 9de854a..1ffcd2f 100644
--- a/X2Go/Utils.pm
+++ b/X2Go/Utils.pm
@@ -106,6 +106,12 @@ sub sanitizer {
$string = $1;
return $string;
} else {return 0;}
+ } elsif ($type eq "pnnum") {
+ $string =~ s/[^0-9\+\-]//g;
+ if ($string =~ /^([0-9\+\-]*)$/) {
+ $string = $1;
+ return $string;
+ } else {return 0;}
} elsif ($type eq "anumazcsdaus") {
$string =~ s/[^a-zA-Z0-9\_\-]//g;
if ($string =~ /^([a-zA-Z0-9\_\-]*)$/) {
diff --git a/debian/changelog b/debian/changelog
index 588d7dc..05d6ba3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -44,6 +44,7 @@ x2goserver (4.1.0.0-0x2go1) UNRELEASED; urgency=low
Move duplicate code into that new Perl package.
- Security audit of complete code tree, avoid one-argument system calls
where possible, avoid backticks, use more quotes in shell scripts.
+ - Add tunneling port allocation for TeleKinesis framework.
* 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/control b/debian/control
index 606547f..aa97942 100644
--- a/debian/control
+++ b/debian/control
@@ -21,6 +21,7 @@ Depends:
${misc:Depends},
libfile-basedir-perl,
libfile-readbackwards-perl,
+ libtry-tiny-perl,
libx2go-server-perl (>= ${source:Version}), libx2go-server-perl (<< ${source:Version}.1~),
x2goagent (>= 2:3.5.0.15-0~),
lsof,
diff --git a/x2goserver-common/etc/x2goserver.conf b/x2goserver-common/etc/x2goserver.conf
index 4f055b0..51e4704 100644
--- a/x2goserver-common/etc/x2goserver.conf
+++ b/x2goserver-common/etc/x2goserver.conf
@@ -25,6 +25,11 @@ enable=no
# the idle nice level (for suspended sessions)
#idle-nice-level=19
+[telekinesis]
+# telekinesis provides a bidirectional communication framework between X2Go Client
+# and X2Go Server
+enable=no
+
[log]
# possible levels are: emerg, alert, crit, err, warning, notice, info, debug
loglevel=notice
diff --git a/x2goserver.spec b/x2goserver.spec
index 8e406c3..fd7d775 100644
--- a/x2goserver.spec
+++ b/x2goserver.spec
@@ -37,6 +37,7 @@ Requires: openssh-server
Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version))
Requires: perl(File::ReadBackwards)
Requires: perl(Capture::Tiny)
+Requires: perl(Try::Tiny)
# We need a database
# For killall in x2gosuspend-session
Requires: psmisc
diff --git a/x2goserver/bin/x2goresume-session b/x2goserver/bin/x2goresume-session
index 09b31dd..5306005 100755
--- a/x2goserver/bin/x2goresume-session
+++ b/x2goserver/bin/x2goresume-session
@@ -43,6 +43,7 @@ fi
"$X2GO_LIB_PATH/x2gosyslog" "$0" "info" "$(basename $0) called with options: $@"
+X2GO_TELEKINESIS_ENABLED=`echo 'use X2Go::Config qw( get_config ); use X2Go::Utils qw( is_true ); my $Config= get_config(); print is_true($Config->param("telekinesis.enable"));' | perl`
# rootless sessions require to be resizable
if [ "$SESSION_TYPE" == "R" ]; then
@@ -97,12 +98,32 @@ if grep -q "|${FS_PORT}|" <<<$SYSTEM_PORTS ; then
FS_PORT=""
fi
+if [ "x$X2GO_TELEKINESIS_ENABLED" == "x1" ]; then
+ TEKICTRL_PORT=`echo "$SESSIONINFO" | awk -F, {'print $15'}`
+ TEKIDATA_PORT=`echo "$SESSIONINFO" | awk -F, {'print $16'}`
+ if grep -q "|${TEKICTRL_PORT}|" <<<$SYSTEM_PORTS ; then
+ $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "port "$TEKICTRL_PORT" is already in use"
+ $X2GO_LIB_PATH/x2gormport "$HOSTNAME" "$SESSION_NAME" "$TEKICTRL_PORT"
+ TEKICTRL_PORT=""
+ fi
+ if grep -q "|${TEKIDATA_PORT}|" <<<$SYSTEM_PORTS ; then
+ $X2GO_LIB_PATH/x2gosyslog "$0" "debug" "port "$TEKIDATA_PORT" is already in use"
+ $X2GO_LIB_PATH/x2gormport "$HOSTNAME" "$SESSION_NAME" "$TEKIDATA_PORT"
+ TEKIDATA_PORT=""
+ fi
+else
+ $X2GO_LIB_PATH/x2gormport "$HOSTNAME" "$SESSION_NAME" "$TEKICTRL_PORT"
+ $X2GO_LIB_PATH/x2gormport "$HOSTNAME" "$SESSION_NAME" "$TEKIDATA_PORT"
+ TEKICTRL_PORT="0"
+ TEKIDATA_PORT="0"
+fi
+
SSH_PORT=30000 #First ssh port 30001
#Get all used in system ports from X2Go database and netstat output
USED_PORTS=`$X2GO_LIB_PATH/x2gogetports "$HOSTNAME"; netstat -nt -all | awk '{ n=split($0,lines,"\n"); for(i=1;i<=n;i++){split (lines[i],words," ");delim=split(words[4],ports,":"); if(delim>1)printf ("|%s|\n",ports[delim])} }'`
-while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]; do
+while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ] || [ "$TEKICTRL_PORT" == "" ] || [ "$TEKIDATA_PORT" == "" ]; do
OUTPUT=""
while [ "$OUTPUT" != "inserted" ]; do
SSH_PORT=$(($SSH_PORT + 1))
@@ -120,8 +141,12 @@ while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]; d
GR_PORT="$SSH_PORT"
elif [ "$SOUND_PORT" == "" ]; then
SOUND_PORT="$SSH_PORT"
- else
+ elif [ "$FS_PORT" == "" ]; then
FS_PORT="$SSH_PORT"
+ elif [ "$TEKICTRL_PORT" == "" ]; then
+ TEKICTRL_PORT="$SSH_PORT"
+ elif [ "$TEKIDATA_PORT" == "" ]; then
+ TEKIDATA_PORT="$SSH_PORT"
fi
done
@@ -182,7 +207,7 @@ rm -Rf "$SESSION_DIR/keyboard"
kill -HUP "$X2GO_AGENT_PID" &>/dev/null && {
- $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" > /dev/null
+ $X2GO_LIB_PATH/x2goresume "$X2GO_CLIENT" "$SESSION_NAME" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$TEKICTRL_PORT" "$TEKIDATA_PORT" > /dev/null
$X2GO_LIB_PATH/x2gosyslog "$0" "notice" "client $X2GO_CLIENT has successfully resumed session with ID $SESSION_NAME"
# set client-side keyboard model, type, variant, etc.
@@ -215,4 +240,7 @@ kill -HUP "$X2GO_AGENT_PID" &>/dev/null && {
echo "gr_port=$GR_PORT"
echo "sound_port=$SOUND_PORT"
echo "fs_port=$FS_PORT"
-
+if [ "x$X2GO_TELEKINESIS_ENABLED" == "x1" ]; then
+ echo "tekictrl_port=$TEKICTRL_PORT"
+ echo "tekidata_port=$TEKIDATA_PORT"
+fi
diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent
index ae8226f..984281a 100755
--- a/x2goserver/bin/x2gostartagent
+++ b/x2goserver/bin/x2gostartagent
@@ -32,6 +32,8 @@ if egrep "^backend[ ]*=[ ]*postgres" /etc/x2go/x2gosql/sql 1>/dev/null 2>/dev/nu
exit -1
fi
+X2GO_TELEKINESIS_ENABLED=`echo 'use X2Go::Config qw( get_config ); use X2Go::Utils qw( is_true ); my $Config = get_config(); print is_true($Config->param("telekinesis.enable"));' | perl`
+
X2GO_ROOT="${HOME}/.x2go"
export NX_ROOT=$X2GO_ROOT
@@ -185,8 +187,12 @@ while [ "$OUTPUT" != "inserted" ]; do
fi
done
+if [ "x$X2GO_TELEKINESIS_ENABLED" == "x0" ]; then
+ TEKICTRL_PORT="-1"
+ TEKIDATA_PORT="-1"
+fi
-while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]; do
+while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ] || [ "$TEKICTRL_PORT" == "" ] || [ "$TEKIDATA_PORT" == "" ]; do
OUTPUT=""
while [ "$OUTPUT" != "inserted" ]; do
SSH_PORT=$(($SSH_PORT + 1))
@@ -212,8 +218,12 @@ while [ "$GR_PORT" == "" ] || [ "$SOUND_PORT" == "" ] || [ "$FS_PORT" == "" ]; d
GR_PORT="$SSH_PORT"
elif [ "$SOUND_PORT" == "" ]; then
SOUND_PORT="$SSH_PORT"
- else
+ elif [ "$FS_PORT" == "" ]; then
FS_PORT="$SSH_PORT"
+ elif [ "$TEKICTRL_PORT" == "" ]; then
+ TEKICTRL_PORT=$SSH_PORT
+ elif [ "$TEKIDATA_PORT" == "" ]; then
+ TEKIDATA_PORT=$SSH_PORT
fi
done
@@ -345,7 +355,7 @@ X2GO_SND_PORT=1024
if [ -n "$SHADREQ_USER" ]; then
$X2GO_LIB_PATH/x2gocreateshadowsession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" "$SHADREQ_USER" > /dev/null
else
- $X2GO_LIB_PATH/x2gocreatesession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" > /dev/null
+ $X2GO_LIB_PATH/x2gocreatesession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$TEKICTRL_PORT" "$TEKIDATA_PORT" "$SESSION_NAME" > /dev/null
fi
if [ "$X2GO_SET_KBD" == "0" ] || [ "$X2GO_KBD_TYPE" != "auto" ]; then
@@ -360,3 +370,7 @@ echo $SESSION_NAME
echo $GR_PORT
echo $SOUND_PORT
echo $FS_PORT
+if [ "x$X2GO_TELEKINESIS_ENABLED" == "x1" ]; then
+ echo $TEKICTRL_PORT
+ echo $TEKIDATA_PORT
+fi
diff --git a/x2goserver/lib/x2gocreatesession b/x2goserver/lib/x2gocreatesession
index 94e09e6..795976e 100755
--- a/x2goserver/lib/x2gocreatesession
+++ b/x2goserver/lib/x2gocreatesession
@@ -36,9 +36,11 @@ my $client=shift or die;
my $gr_port=shift or die;
my $snd_port=shift or die;
my $fs_port=shift or die;
+my $tekictrl_port=shift or die;
+my $tekidata_port=shift or die;
my $sid=shift or die;
-db_createsession($cookie,$pid,$client,$gr_port, $snd_port, $fs_port, $sid);
+db_createsession($cookie,$pid,$client,$gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid);
# closing syslog
closelog;
\ No newline at end of file
diff --git a/x2goserver/lib/x2goresume b/x2goserver/lib/x2goresume
index 3587049..5ae6966 100755
--- a/x2goserver/lib/x2goresume
+++ b/x2goserver/lib/x2goresume
@@ -35,8 +35,9 @@ my $sid=shift or die;
my $gr_port=shift or die;
my $snd_port=shift or die;
my $fs_port=shift or die;
-
-db_resume($client, $sid, $gr_port, $snd_port, $fs_port);
+my $tekictrl_port=shift or die;
+my $tekidata_port=shift or die;
+db_resume($client, $sid, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port);
# closing syslog
closelog;
diff --git a/x2goserver/sbin/x2godbadmin b/x2goserver/sbin/x2godbadmin
index c68072f..50597b6 100755
--- a/x2goserver/sbin/x2godbadmin
+++ b/x2goserver/sbin/x2godbadmin
@@ -25,6 +25,7 @@ use Sys::Syslog qw( :standard :macros );
use File::Path qw( make_path );
use Getopt::Long;
use DBI;
+use Try::Tiny;
use X2Go::Config qw( get_sqlconfig );
use X2Go::Log qw( loglevel );
@@ -36,6 +37,7 @@ sub show_usage()
{
print "X2Go SQL admin interface. Use it to create x2go database and insert or remove users or groups in x2go database\n".
"Usage:\nx2godbadmin --createdb\n".
+ "x2godbadmin --updatedb\n".
"x2godbadmin --listusers\n".
"x2godbadmin --adduser|rmuser <UNIX user>\n".
"x2godbadmin --addgroup|rmgroup <UNIX group>\n";
@@ -43,16 +45,17 @@ sub show_usage()
my $help='';
my $createdb='';
+my $updatedb='';
my $adduser='';
my $rmuser='';
my $addgroup='';
my $rmgroup='';
my $listusers='';
-GetOptions('listusers' => \$listusers, 'createdb' => \$createdb, 'help' => \$help, 'adduser=s' => \$adduser,
+GetOptions('listusers' => \$listusers, 'createdb' => \$createdb, 'updatedb' => \$updatedb, 'help' => \$help, 'adduser=s' => \$adduser,
'addgroup=s' => \$addgroup, 'rmuser=s' => \$rmuser, 'rmgroup=s' => \$rmgroup);
-if ($help || ! ( $createdb || $adduser || $rmuser || $addgroup || $rmgroup || $listusers))
+if ($help || ! ( $createdb || $updatedb || $adduser || $rmuser || $addgroup || $rmgroup || $listusers))
{
show_usage();
exit(0);
@@ -74,9 +77,56 @@ if ($Config->param("backend") eq 'sqlite')
if ($listusers|| $adduser||$addgroup||$rmuser||$rmgroup)
{
- print "Only \"--createdb\" option is available with sqlite backend\n";
+ print "Only \"--createdb\" and \"--updatedb\" options are available with SQLite3 backend\n";
exit(0);
}
+ if ($updatedb)
+ {
+ if ( ! -e $dbfile)
+ {
+
+ $createdb = 1;
+
+ } else {
+
+ # Update the session DB file
+ my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{AutoCommit => 1, PrintError => 0, PrintWarn => 1, RaiseError => 1 }) or die $_;
+ my $coltest;
+ my $sth;
+ # Update missing column on sessions table: tekictrl_port
+ try
+ {
+ $dbh->prepare("
+ select tekictrl_port from sessions
+ ");
+ } catch {
+ print "ADDING: tekictrl_port column to table sessions\n";
+ $sth=$dbh->prepare("
+ alter table sessions add column 'tekictrl_port' int
+ ");
+ $sth->execute();
+ $sth->finish();
+ };
+
+ # Update missing column on sessions table: tekidata_port
+ try
+ {
+ $dbh->prepare("
+ select tekidata_port from sessions
+ ");
+ } catch {
+ print "ADDING: tekidata_port column to table sessions\n";
+ $sth=$dbh->prepare("
+ alter table sessions add column 'tekidata_port' int
+ ");
+ $sth->execute();
+ $sth->finish();
+ };
+
+ exit(0);
+ }
+ }
+
if ($createdb)
{
if (! -d "$dir" )
@@ -104,6 +154,8 @@ if ($Config->param("backend") eq 'sqlite')
gr_port int,
sound_port int,
fs_port int,
+ tekictrl_port int,
+ tekidata_port int,
unique(display))
");
$sth->execute() or die;
@@ -374,6 +426,8 @@ sub create_tables()
gr_port int,
sound_port int,
fs_port int,
+ tekictrl_port int,
+ tekictrl_data int,
creator_id text NOT NULL default current_user,
unique(display))
");
@@ -383,7 +437,7 @@ sub create_tables()
create VIEW sessions_view as
SELECT
agent_pid, session_id, display, server, status, init_time, cookie, client, gr_port,
- sound_port, last_time, uname, fs_port from sessions
+ sound_port, last_time, uname, fs_port, tekictrl_port, tekidata_port from sessions
where creator_id = current_user
");
$sth->execute() or die;
@@ -428,6 +482,8 @@ sub create_tables()
gr_port=NEW.gr_port,
sound_port=NEW.sound_port,
fs_port=NEW.fs_port
+ tekictrl_port=NEW.tekictrl_port
+ tekidata_port=NEW.tekidata_port
where session_id=OLD.session_id and creator_id=current_user
");
$sth->execute() or die;
--
Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2goserver.git
More information about the x2go-commits
mailing list