[X2Go-Commits] x2goserver.git - build-baikal (branch) updated: 3.1.1.3-33-gd845b63
X2Go dev team
git-admin at x2go.org
Fri Jan 3 20:51:30 CET 2014
The branch, build-baikal has been updated
via d845b630f85954350ff1ff3a767b384976b0a09b (commit)
from d34d3656f53de76f961f5c85feb1882b98effab8 (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:
.../Server/DB/SQLite3.pm | 219 +++++----
debian/changelog | 2 +
x2goserver/lib/x2gosqlitewrapper.pl | 467 ++------------------
3 files changed, 170 insertions(+), 518 deletions(-)
copy x2goserver/lib/x2gosqlitewrapper.pl => X2Go/Server/DB/SQLite3.pm (76%)
The diff of changes is:
diff --git a/x2goserver/lib/x2gosqlitewrapper.pl b/X2Go/Server/DB/SQLite3.pm
similarity index 76%
copy from x2goserver/lib/x2gosqlitewrapper.pl
copy to X2Go/Server/DB/SQLite3.pm
index 94d8f91..a1edb22 100755
--- a/x2goserver/lib/x2gosqlitewrapper.pl
+++ b/X2Go/Server/DB/SQLite3.pm
@@ -20,11 +20,15 @@
# Copyright (C) 2007-2012 Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
# Copyright (C) 2007-2012 Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+package X2Go::Server::DB::SQLite3;
+
use strict;
use DBI;
use POSIX;
-#### NOTE: this script is run setgid <group> and it cannot do system() calls.
+#### NOTE: the default X2Go server setups runs the code in this package
+#### via a setgid <group> wrapper (where <group> is group ,,x2gouser'').
+#### It is intended that the code in this package cannot do system() calls.
use Config::Simple;
use Sys::Syslog qw( :standard :macros );
@@ -33,28 +37,31 @@ use X2Go::Log qw(loglevel);
openlog($0,'cons,pid','user');
setlogmask( LOG_UPTO(loglevel()) );
-####
-#### end of duplicated syslogging code
-####
-
-# retrieve home dir of x2gouser
-my $x2gouser='x2gouser';
-my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwnam($x2gouser);
-my $dbfile="$homedir/x2go_sessions";
-
-# retrieve account data of real user
my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid($<);
my $realuser=$uname;
-my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{sqlite_use_immediate_transaction => 1, AutoCommit => 1, }) or die $_;
-$dbh->sqlite_busy_timeout( 2000 );
+use base 'Exporter';
-my $cmd=shift or die "command not specified";
-my $rc=0;
+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');
-if($cmd eq "rmsessionsroot")
+sub init_db
{
- checkroot();
+ # retrieve home dir of x2gouser
+ my $x2gouser='x2gouser';
+ my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwnam($x2gouser);
+ my $dbfile="$homedir/x2go_sessions";
+ my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{sqlite_use_immediate_transaction => 1, AutoCommit => 1, }) or die $_;
+ $dbh->sqlite_busy_timeout( 2000 );
+ return $dbh;
+}
+
+sub dbsys_rmsessionsroot
+{
+ my $dbh = init_db();
+ check_root();
my $sid=shift or die "argument \"session_id\" missed";
my $sth=$dbh->prepare("delete from sessions where session_id=?");
$sth->execute($sid);
@@ -64,11 +71,13 @@ if($cmd eq "rmsessionsroot")
die;
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "listsessionsroot")
+sub dbsys_listsessionsroot
{
- checkroot();
+ my $dbh = init_db();
+ check_root();
my $server=shift or die "argument \"server\" missed";
my @strings;
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
@@ -83,12 +92,16 @@ elsif($cmd eq "listsessionsroot")
syslog('error', "listsessionsroot (SQLite3 session db backend) failed with exitcode: $sth->err()");
die();
}
- fetchrow_printall_array($sth);
+ my @sessions = fetchrow_array_session_entries($sth);
+ $sth->finish();
+ $dbh->disconnect();
+ return @sessions;
}
-elsif($cmd eq "listsessionsroot_all")
+sub listsessionsroot_all
{
- checkroot();
+ my $dbh = init_db();
+ check_root();
my @strings;
my $sth=$dbh->prepare("select agent_pid, session_id, display, server, status,
strftime('%Y-%m-%dT%H:%M:%S',init_time),
@@ -103,11 +116,15 @@ elsif($cmd eq "listsessionsroot_all")
syslog('error', "listsessionsroot_all (SQLite3 session db backend) failed with exitcode: $sth->err()");
die();
}
- fetchrow_printall_array($sth);
+ my @sessions = fetchrow_array_datasets($sth);
+ $sth->finish();
+ $dbh->disconnect();
+ return @sessions;
}
-elsif($cmd eq "getmounts")
+sub db_getmounts
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
check_user($sid);
my @strings;
@@ -118,11 +135,15 @@ elsif($cmd eq "getmounts")
syslog('error', "getmounts (SQLite3 session db backend) failed with exitcode: $sth->err()");
die;
}
- fetchrow_printall_array($sth);
+ my @mounts = fetchrow_array_datasets($sth);
+ $sth->finish();
+ $dbh->disconnect();
+ return @mounts;
}
-elsif($cmd eq "deletemount")
+sub db_deletemount
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
my $path=shift or die "argument \"path\" missed";
check_user($sid);
@@ -134,41 +155,49 @@ elsif($cmd eq "deletemount")
die();
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "deletemounts")
+sub db_deletemounts
{
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("delete from mounts where session_id=?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "deletemounts (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
+ my $dbh = init_db();
+ my $sid=shift or die "argument \"session_id\" missed";
+ check_user($sid);
+ my $sth=$dbh->prepare("delete from mounts where session_id=?");
+ $sth->execute($sid);
+ if ($sth->err())
+ {
+ syslog('error', "deletemounts (SQLite3 session db backend) failed with exitcode: $sth->err()");
+ die();
+ }
+ $sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "insertmount")
+sub db_insertmount
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
my $path=shift or die "argument \"path\" missed";
my $client=shift or die "argument \"client\" missed";
check_user($sid);
my $sth=$dbh->prepare("insert into mounts (session_id,path,client) values (?, ?, ?)");
$sth->execute($sid, $path, $client);
+ my $success = 0;
if(! $sth->err())
{
- print "ok";
+ $success = 1;
} else {
syslog('debug', "insertmount (SQLite3 session db backend) failed with exitcode: $sth->err(), this issue will be interpreted as: SSHFS share already mounted");
}
$sth->finish();
+ $dbh->disconnect();
+ return $success;
}
-elsif($cmd eq "insertsession")
+sub db_insertsession
{
+ my $dbh = init_db();
my $display=shift or die "argument \"display\" missed";
my $server=shift or die "argument \"server\" missed";
my $sid=shift or die "argument \"session_id\" missed";
@@ -177,11 +206,13 @@ elsif($cmd eq "insertsession")
(?, ?, ?, ?, datetime('now','localtime'), datetime('now','localtime'))");
$sth->execute($display, $server, $realuser, $sid) or die $_;
$sth->finish();
- print "ok";
+ $dbh->disconnect();
+ return 1;
}
-elsif($cmd eq "createsession")
+sub db_createsession
{
+ my $dbh = init_db();
my $cookie=shift or die"argument \"cookie\" missed";
my $pid=shift or die"argument \"pid\" missed";
my $client=shift or die"argument \"client\" missed";
@@ -199,11 +230,13 @@ elsif($cmd eq "createsession")
die();
}
$sth->finish();
- print "ok";
+ $dbh->disconnect();
+ return 1;
}
-elsif($cmd eq "insertport")
+sub db_insertport
{
+ my $dbh = init_db();
my $server=shift or die "argument \"server\" missed";
my $sid=shift or die "argument \"session_id\" missed";
my $sshport=shift or die "argument \"port\" missed";
@@ -216,10 +249,12 @@ elsif($cmd eq "insertport")
die();
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "rmport")
+sub db_rmport
{
+ my $dbh = init_db();
my $server=shift or die "argument \"server\" missed";
my $sid=shift or die "argument \"session_id\" missed";
my $sshport=shift or die "argument \"port\" missed";
@@ -231,10 +266,12 @@ elsif($cmd eq "rmport")
die();
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "resume")
+sub db_resume
{
+ my $dbh = init_db();
my $client=shift or die "argument \"client\" missed";
my $sid=shift or die "argument \"session_id\" missed";
my $gr_port=shift or die "argument \"gr_port\" missed";
@@ -250,10 +287,12 @@ elsif($cmd eq "resume")
die();
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "changestatus")
+sub db_changestatus
{
+ my $dbh = init_db();
my $status=shift or die "argument \"status\" missed";
my $sid=shift or die "argument \"session_id\" missed";
check_user($sid);
@@ -266,10 +305,12 @@ elsif($cmd eq "changestatus")
die();
}
$sth->finish();
+ $dbh->disconnect();
}
-elsif($cmd eq "getstatus")
+sub db_getstatus
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
check_user($sid);
my $sth=$dbh->prepare("select status from sessions where session_id = ?");
@@ -283,14 +324,16 @@ elsif($cmd eq "getstatus")
my $status;
@data = $sth->fetchrow_array;
{
- $status = @data[0];
+ $status = $data[0];
}
$sth->finish();
- print $status;
+ $dbh->disconnect();
+ return $status;
}
-elsif($cmd eq "getdisplays")
+sub db_getdisplays
{
+ my $dbh = init_db();
#ignore $server
my @strings;
my $sth=$dbh->prepare("select display from sessions");
@@ -304,15 +347,16 @@ elsif($cmd eq "getdisplays")
my $i=0;
while (@data = $sth->fetchrow_array)
{
- @strings[$i++]='|'. at data[0].'|';
+ $strings[$i++]='|'.$data[0].'|';
}
$sth->finish();
- print join("\n", at strings);
+ $dbh->disconnect();
+ return join("\n", at strings);
}
-elsif($cmd eq "getports")
+sub db_getports
{
-
+ my $dbh = init_db();
#ignore $server
my $server=shift or die "argument \"server\" missed";
my @strings;
@@ -327,14 +371,16 @@ elsif($cmd eq "getports")
my $i=0;
while (@data = $sth->fetchrow_array)
{
- @strings[$i++]='|'. at data[0].'|';
+ $strings[$i++]='|'.$data[0].'|';
}
$sth->finish();
- print join("\n", at strings);
+ $dbh->disconnect();
+ return join("\n", at strings);
}
-elsif($cmd eq "getservers")
+sub db_getservers
{
+ my $dbh = init_db();
my @strings;
my $sth=$dbh->prepare("select server,count(*) from sessions where status != 'F' group by server");
$sth->execute();
@@ -347,14 +393,16 @@ elsif($cmd eq "getservers")
my $i=0;
while (@data = $sth->fetchrow_array)
{
- @strings[$i++]=@data[0];
+ $strings[$i++]=$data[0];
}
$sth->finish();
- print join("\n", at strings);
+ $dbh->disconnect();
+ return join("\n", at strings);
}
-elsif($cmd eq "getagent")
+sub db_getagent
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
my $agent;
check_user($sid);
@@ -370,14 +418,16 @@ elsif($cmd eq "getagent")
my $i=0;
if(@data = $sth->fetchrow_array)
{
- $agent=@data[0];
+ $agent=$data[0];
}
$sth->finish();
- print $agent;
+ $dbh->disconnect();
+ return $agent;
}
-elsif($cmd eq "getdisplay")
+sub db_getdisplay
{
+ my $dbh = init_db();
my $sid=shift or die "argument \"session_id\" missed";
my $display;
check_user($sid);
@@ -393,14 +443,16 @@ elsif($cmd eq "getdisplay")
my $i=0;
if(@data = $sth->fetchrow_array)
{
- $display=@data[0];
+ $display=$data[0];
}
$sth->finish();
- print $display;
+ $dbh->disconnect();
+ return $display;
}
-elsif($cmd eq "listsessions")
+sub db_listsessions
{
+ 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,
@@ -417,11 +469,15 @@ elsif($cmd eq "listsessions")
syslog('error', "listsessions (SQLite3 session db backend) failed with exitcode: $sth->err()");
die();
}
- fetchrow_printall_array($sth);
+ my @sessions = fetchrow_array_datasets($sth);
+ $sth->finish();
+ $dbh->disconnect();
+ return @sessions;
}
-elsif($cmd eq "listsessions_all")
+sub listsessions_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),
@@ -437,16 +493,13 @@ elsif($cmd eq "listsessions_all")
syslog('error', "listsessions_all (SQLite3 session db backend) failed with exitcode: $sth->err()");
die();
}
- fetchrow_printall_array($sth);
-}
-else
-{
- print "unknown command $cmd\n";
+ my @sessions = fetchrow_array_datasets($sth);
+ $sth->finish();
+ $dbh->disconnect();
+ return @sessions;
}
-$dbh->disconnect();
-
-sub checkroot
+sub check_root
{
if ($realuser ne "root")
{
@@ -465,16 +518,16 @@ sub check_user
$user eq $realuser or die "$realuser is not authorized";
}
-sub fetchrow_printall_array
+sub fetchrow_array_datasets
{
- # print all arrays separated by the pipe symbol
- local $, = '|';
-
my $sth = shift;
+ my @lines;
my @data;
while (@data = $sth->fetchrow_array())
{
- print @data, "\n";
+ push @lines, join('|', @data);
}
- $sth->finish();
+ return @lines;
}
+
+1;
diff --git a/debian/changelog b/debian/changelog
index a83f152..e215b2f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -19,6 +19,8 @@ x2goserver (3.2.0.0-0~x2go1) UNRELEASED; urgency=low
that the LD_LIBRARY_PATH variable stays intact. Closes #29.
- Transform x2gologlevel.pm into proper Perl module X2Go::Log.
- Transform x2godbwrapper.pm into proper Perl module X2Go::Server::DB.
+ - Transform x2gosqlitewrapper.pl into small wrapper script and move the
+ SQLite3 into Perl package X2Go::Server::DB::SQLite3.
* /debian/control:
+ Maintainer change in package: X2Go Developers <x2go-dev at lists.berlios.de>.
+ Depend on nx-libs (>=3.5.0.15-0~) which has the Xrandr symlinks folder.
diff --git a/x2goserver/lib/x2gosqlitewrapper.pl b/x2goserver/lib/x2gosqlitewrapper.pl
index 94d8f91..5247fee 100755
--- a/x2goserver/lib/x2gosqlitewrapper.pl
+++ b/x2goserver/lib/x2gosqlitewrapper.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/perl -XU
# Copyright (C) 2007-2012 X2Go Project - http://wiki.x2go.org
#
@@ -21,460 +21,57 @@
# Copyright (C) 2007-2012 Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
use strict;
-use DBI;
-use POSIX;
+use Switch;
-#### NOTE: this script is run setgid <group> and it cannot do system() calls.
-
-use Config::Simple;
-use Sys::Syslog qw( :standard :macros );
-use X2Go::Log qw(loglevel);
-
-openlog($0,'cons,pid','user');
-setlogmask( LOG_UPTO(loglevel()) );
-
-####
-#### end of duplicated syslogging code
-####
-
-# retrieve home dir of x2gouser
-my $x2gouser='x2gouser';
-my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwnam($x2gouser);
-my $dbfile="$homedir/x2go_sessions";
-
-# retrieve account data of real user
-my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid($<);
-my $realuser=$uname;
-
-my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{sqlite_use_immediate_transaction => 1, AutoCommit => 1, }) or die $_;
-$dbh->sqlite_busy_timeout( 2000 );
-
-my $cmd=shift or die "command not specified";
-my $rc=0;
-
-if($cmd eq "rmsessionsroot")
-{
- checkroot();
- my $sid=shift or die "argument \"session_id\" missed";
- my $sth=$dbh->prepare("delete from sessions where session_id=?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "rmsessionsroot (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die;
- }
- $sth->finish();
-}
-
-elsif($cmd eq "listsessionsroot")
-{
- checkroot();
- 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 server=? order by status desc");
- $sth->execute($server);
- if ($sth->err()) {
- syslog('error', "listsessionsroot (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- fetchrow_printall_array($sth);
-}
-
-elsif($cmd eq "listsessionsroot_all")
-{
- checkroot();
- 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
- order by status desc");
- $sth->execute();
- if ($sth->err())
- {
- syslog('error', "listsessionsroot_all (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- fetchrow_printall_array($sth);
-}
-
-elsif($cmd eq "getmounts")
-{
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my @strings;
- my $sth=$dbh->prepare("select client, path from mounts where session_id=?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "getmounts (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die;
- }
- fetchrow_printall_array($sth);
-}
-
-elsif($cmd eq "deletemount")
-{
- my $sid=shift or die "argument \"session_id\" missed";
- my $path=shift or die "argument \"path\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("delete from mounts where session_id=? and path=?");
- $sth->execute($sid, $path);
- if ($sth->err())
- {
- syslog('error', "deletemount (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
+use X2Go::Server::DB::SQLite3;
-elsif($cmd eq "deletemounts")
-{
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("delete from mounts where session_id=?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "deletemounts (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
+#### NOTE: this script is run setgid <group> and it cannot do system() calls.
-elsif($cmd eq "insertmount")
+sub print_result
{
- my $sid=shift or die "argument \"session_id\" missed";
- my $path=shift or die "argument \"path\" missed";
- my $client=shift or die "argument \"client\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("insert into mounts (session_id,path,client) values (?, ?, ?)");
- $sth->execute($sid, $path, $client);
- if(! $sth->err())
+ my $retval = shift;
+ if ( $retval =~ /^(0|1)/ )
{
- print "ok";
+ if ( $retval )
+ {
+ print "ok";
+ }
} else {
- syslog('debug', "insertmount (SQLite3 session db backend) failed with exitcode: $sth->err(), this issue will be interpreted as: SSHFS share already mounted");
- }
- $sth->finish();
-}
-
-elsif($cmd eq "insertsession")
-{
- my $display=shift or die "argument \"display\" missed";
- my $server=shift or die "argument \"server\" missed";
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("insert into sessions (display,server,uname,session_id, init_time, last_time) values
- (?, ?, ?, ?, datetime('now','localtime'), datetime('now','localtime'))");
- $sth->execute($display, $server, $realuser, $sid) or die $_;
- $sth->finish();
- print "ok";
-}
-
-elsif($cmd eq "createsession")
-{
- my $cookie=shift or die"argument \"cookie\" missed";
- my $pid=shift or die"argument \"pid\" missed";
- my $client=shift or die"argument \"client\" missed";
- 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 $sid=shift or die "argument \"session_id\" missed";
- 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);
- if ($sth->err())
- {
- syslog('error', "createsession (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
- print "ok";
-}
-
-elsif($cmd eq "insertport")
-{
- my $server=shift or die "argument \"server\" missed";
- my $sid=shift or die "argument \"session_id\" missed";
- my $sshport=shift or die "argument \"port\" missed";
- my $sth=$dbh->prepare("insert into used_ports (server,session_id,port) values (?, ?, ?)");
- check_user($sid);
- $sth->execute($server, $sid, $sshport);
- if ($sth->err())
- {
- syslog('error', "insertport (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
-
-elsif($cmd eq "rmport")
-{
- my $server=shift or die "argument \"server\" missed";
- my $sid=shift or die "argument \"session_id\" missed";
- my $sshport=shift or die "argument \"port\" missed";
- my $sth=$dbh->prepare("delete from used_ports where server=? and session_id=? and port=?");
- check_user($sid);
- $sth->execute($server, $sid, $sshport);
- if ($sth->err()) {
- syslog('error', "rmport (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
-
-elsif($cmd eq "resume")
-{
- my $client=shift or die "argument \"client\" missed";
- my $sid=shift or die "argument \"session_id\" missed";
- my $gr_port=shift or die "argument \"gr_port\" missed";
- my $sound_port=shift or die "argument \"sound_port\" missed";
- my $fs_port=shift or die "argument \"fs_port\" missed";
- 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, $sound_port, $fs_port, $sid, $realuser);
- if ($sth->err())
- {
- syslog('error', "resume (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
-
-elsif($cmd eq "changestatus")
-{
- my $status=shift or die "argument \"status\" missed";
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("update sessions set last_time=datetime('now','localtime'),
- status=? where session_id = ? and uname=?");
- $sth->execute($status, $sid, $realuser);
- if ($sth->err())
- {
- syslog('error', "changestatus (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- $sth->finish();
-}
-
-elsif($cmd eq "getstatus")
-{
- my $sid=shift or die "argument \"session_id\" missed";
- check_user($sid);
- my $sth=$dbh->prepare("select status from sessions where session_id = ?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "changestatus (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- my @data;
- my $status;
- @data = $sth->fetchrow_array;
- {
- $status = @data[0];
- }
- $sth->finish();
- print $status;
-}
-
-elsif($cmd eq "getdisplays")
-{
- #ignore $server
- my @strings;
- my $sth=$dbh->prepare("select display from sessions");
- $sth->execute();
- if ($sth->err())
- {
- syslog('error', "getdisplays (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- my @data;
- my $i=0;
- while (@data = $sth->fetchrow_array)
- {
- @strings[$i++]='|'. at data[0].'|';
- }
- $sth->finish();
- print join("\n", at strings);
-}
-
-elsif($cmd eq "getports")
-{
-
- #ignore $server
- my $server=shift or die "argument \"server\" missed";
- my @strings;
- my $sth=$dbh->prepare("select port from used_ports");
- $sth->execute();
- if ($sth->err())
- {
- syslog('error', "getports (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- my @data;
- my $i=0;
- while (@data = $sth->fetchrow_array)
- {
- @strings[$i++]='|'. at data[0].'|';
- }
- $sth->finish();
- print join("\n", at strings);
-}
-
-elsif($cmd eq "getservers")
-{
- my @strings;
- my $sth=$dbh->prepare("select server,count(*) from sessions where status != 'F' group by server");
- $sth->execute();
- if ($sth->err())
- {
- syslog('error', "getservers (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- my @data;
- my $i=0;
- while (@data = $sth->fetchrow_array)
- {
- @strings[$i++]=@data[0];
- }
- $sth->finish();
- print join("\n", at strings);
-}
-
-elsif($cmd eq "getagent")
-{
- my $sid=shift or die "argument \"session_id\" missed";
- my $agent;
- check_user($sid);
- my $sth=$dbh->prepare("select agent_pid from sessions
- where session_id=?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "getagent (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
+ print $retval;
}
- my @data;
- my $i=0;
- if(@data = $sth->fetchrow_array)
- {
- $agent=@data[0];
- }
- $sth->finish();
- print $agent;
}
-elsif($cmd eq "getdisplay")
+sub print_array
{
- my $sid=shift or die "argument \"session_id\" missed";
- my $display;
- check_user($sid);
- my $sth=$dbh->prepare("select display from sessions
- where session_id =?");
- $sth->execute($sid);
- if ($sth->err())
- {
- syslog('error', "getdisplay (SQLite3 session db backend) failed with exitcode: $sth->err()");
- die();
- }
- my @data;
- my $i=0;
- if(@data = $sth->fetchrow_array)
+ # print all arrays separated by the pipe symbol
+ local $, = '|';
+ print "THIS IS AN ARRAY!!!!";
+ while (<>)
{
- $display=@data[0];
+ print $_, "\n";
}
- $sth->finish();
- print $display;
}
-elsif($cmd eq "listsessions")
-{
- 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 not 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();
- }
- fetchrow_printall_array($sth);
-}
+my $result;
+my $cmd=shift or die "command not specified";
-elsif($cmd eq "listsessions_all")
+# call the corresponding function in the X2Go::Server:DB:SQLite3 package
+switch ($cmd)
{
- 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 not 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();
- }
- fetchrow_printall_array($sth);
-}
-else
-{
- print "unknown command $cmd\n";
+ case /.*root/ { $result = eval("X2Go::Server::DB::SQLite3::dbsys_$cmd(\@ARGV)") }
+ else { $result = eval("X2Go::Server::DB::SQLite3::db_$cmd(\@ARGV)") }
}
-$dbh->disconnect();
-
-sub checkroot
+# depending on the type of $result we do different things...
+print $result;
+if ( defined($result) )
{
- if ($realuser ne "root")
+ if ( ref($result) eq "ARRAY" )
{
- die "$realuser, you can not do this job";
+ print_array($result);
+ } else {
+ print_result($result);
}
}
-sub check_user
-{
- my $sid=shift or die "argument \"session_id\" missed";
- return if $realuser eq "root";
- # session id looks like someuser-51-1304005895_stDgnome-session_dp24
- # during DB insertsession it only looks like someuser-51-1304005895
- my $user = "$sid";
- $user =~ s/$realuser-[0-9]{2,}-[0-9]{10,}.*/$realuser/;
- $user eq $realuser or die "$realuser is not authorized";
-}
-
-sub fetchrow_printall_array
-{
- # print all arrays separated by the pipe symbol
- local $, = '|';
-
- my $sth = shift;
- my @data;
- while (@data = $sth->fetchrow_array())
- {
- print @data, "\n";
- }
- $sth->finish();
-}
+exit (0);
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