This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch feature/mysql-backend in repository x2goserver. from f86c708 X2Go/Server/DB/PostgreSQL.pm: fix syntax error. new 8d5383f x2goserver/sbin/x2godbadmin: don't use prototypes when functions actually take arguments. new 73c2770 X2Go/Server/DB: add new file MySQL.pm, implementing the MySQL session storage backend. The 2 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: X2Go/Server/DB/MySQL.pm | 714 ++++++++++++++++++++++++++++++++++++++++++++ debian/changelog | 5 + x2goserver/sbin/x2godbadmin | 28 +- 3 files changed, 733 insertions(+), 14 deletions(-) create mode 100644 X2Go/Server/DB/MySQL.pm -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch feature/mysql-backend in repository x2goserver. commit 73c2770b675561c217ba83342e75faf4494c4c80 Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Feb 24 23:23:34 2018 +0100 X2Go/Server/DB: add new file MySQL.pm, implementing the MySQL session storage backend. Based on original code by Walid Moghrabi, but modified. Will fail to execute correctly, so do not use yet. --- X2Go/Server/DB/MySQL.pm | 714 ++++++++++++++++++++++++++++++++++++++++++++++++ debian/changelog | 3 + 2 files changed, 717 insertions(+) diff --git a/X2Go/Server/DB/MySQL.pm b/X2Go/Server/DB/MySQL.pm new file mode 100644 index 0000000..6771724 --- /dev/null +++ b/X2Go/Server/DB/MySQL.pm @@ -0,0 +1,714 @@ +# Copyright (C) 2007-2018 X2Go Project - http://wiki.x2go.org +# Copyright (C) 2007-2018 Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> +# Copyright (C) 2007-2018 Heinz-Markus Graesing <heinz-m.graesing@obviously-nice.de> +# Copyright (C) 2017-2018 Walid Moghrabi <w.moghrabi@servicemagic.eu> +# Copyright (C) 2018 Mihai Moldovan <ionic@ionic.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the +# Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +package X2Go::Server::DB::MySQL; + +=head1 NAME + +X2Go::Server::DB::MySQL - X2Go Session Database package for Perl (MySQL backend) + +=head1 DESCRIPTION + +X2Go::Server::DB::MySQL Perl package for X2Go::Server. + +=cut + +use strict; +use DBI; +use POSIX; +use Sys::Syslog qw( :standard :macros ); + +use X2Go::Log qw( loglevel ); +use X2Go::Config qw( get_config get_sqlconfig ); +use X2Go::Utils qw( sanitizer system_capture_stdout_output is_true ); + +setlogmask( LOG_UPTO(loglevel()) ); + +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_insertshadowsession', '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_listshadowsessions','db_listshadowsessions_all'); + +my ($uname, $pass, $uid, $pgid, $quota, $comment, $gcos, $homedir, $shell, $expire) = getpwuid(getuid()); + +my $host; +my $port; +my $db="x2go_sessions"; +my $dbpass; +my $dbuser; +my $sslmode; +my $with_TeKi; + +sub init_db +{ + # the $Config is required later (see below...) + my $Config = get_config; + $with_TeKi = is_true($Config->param("telekinesis.enable")); + + if ( ! ( $dbuser and $dbpass ) ) + { + my $SqlConfig = get_sqlconfig; + my $x2go_lib_path=system_capture_stdout_output("x2gopath", "libexec"); + + my $backend=$SqlConfig->param("backend"); + if ( $backend ne "mysql" ) + { + die "X2Go server is not configured to use the MySQL session db backend"; + } + + $host=$SqlConfig->param("mysql.host"); + $port=$SqlConfig->param("mysql.port"); + if (!$host) + { + $host='localhost'; + } + if (!$port) + { + $port='3306'; + } + my $passfile; + if ($uname eq 'root') + { + $dbuser='x2godbuser'; + $passfile="/etc/x2go/x2gosql/passwords/x2gomysqladmin"; + } + else + { + $dbuser="x2gouser_$uname"; + $passfile="$homedir/.x2go/mysqlpass"; + } + open (FL,"< $passfile") or die "Can't read password file $passfile<br><b>Use x2godbadmin on server to configure database access for user $uname</b><br>"; + $dbpass=<FL>; + close(FL); + chomp($dbpass); + } + + my $dbh = DBI->connect ("dbi:mysql:database=$db;host=$host;port=$port", "$dbuser", "$dbpass", {AutoCommit => 1}) or die $_; + + return $dbh; +} + +sub check_error +{ + my $sth = shift or die "Invalid or no statement handle parameter supplied"; + my $fatal = shift; + + my $func_name = (caller(1))[3]; + + $fatal = 1 unless defined($fatal); + + if ($sth->err()) + { + syslog('error', "$func_name (MySQL session DB backend) failed with exitcode: " . $sth->err() . ": " . $sth->errstr()); + + if ($fatal) { + die "$func_name (MySQL session DB backend): " . $sth->err() . ": " . $sth->errstr(); + } + } +} + +sub fetchrow_array_datasets +{ + my $sth = shift or die "Invalid or no statement handle parameter supplied"; + my @lines; + while (my @data = $sth->fetchrow_array()) + { + push @lines, join('|', @data); + } + return @lines; +} + +sub fetchrow_array_datasets_single_framed +{ + my $sth = shift or die "Invalid or no statement handle parameter supplied"; + my @lines; + while (my @data = $sth->fetchrow_array()) + { + push @lines, "|" . @data[0] . "|"; + } + return @lines; +} + +sub fetchrow_array_datasets_double_spacelim +{ + my $sth = shift or die "Invalid or no statement handle parameter supplied"; + my @lines; + while (my @data = $sth->fetchrow_array()) + { + push @lines, @data[0] . " " . @data[1]; + } + return @lines; +} + +sub fetchrow_array_single_single +{ + my $sth = shift or die "Invalid or no statement handle parameter supplied"; + my $ret = ''; + if (my @data = $sth->fetchrow_array()) + { + $ret = @data[0]; + } + return $ret; +} + +sub dbsys_rmsessionsroot +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + my $sth=$dbh->prepare("delete from sessions where session_id=?"); + $sth->execute($sid); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub dbsys_deletemounts +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + my $sth=$dbh->prepare("delete from mounts where session_id=?"); + $sth->execute($sid); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub dbsys_listsessionsroot +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my @strings; + my $sth = undef; + if ($with_TeKi) { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port, tekictrl_port, tekidata_port + from sessions + where server=? order by status desc"); + } else { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions + where server=? order by status desc"); + } + $sth->execute($server); + check_error($sth); + @strings = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @strings; +} + +sub dbsys_listsessionsroot_all +{ + my $dbh = init_db(); + my @strings; + my $sth = undef; + if ($with_TeKi) { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port, tekictrl_port, tekidata_port + from sessions + order by status desc"); + } else { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions + order by status desc"); + } + $sth->execute(); + check_error($sth); + @strings = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @strings; +} + +sub dbsys_getmounts +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my @mounts; + my $sth=$dbh->prepare("select client, path from mounts where session_id=?"); + $sth->execute($sid); + check_error($sth); + @mounts = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @mounts; +} + +sub db_getmounts +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my @mounts; + die "mounts_view must be implemented first!"; + my $sth=$dbh->prepare("select client, path from mounts_view where session_id=?"); + $sth->execute($sid); + check_error($sth); + @mounts = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @mounts; +} + +sub db_deletemount +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $path = shift or die "argument \"path\" missing"; + die "mounts_view must be implemented first!"; + my $sth=$dbh->prepare("delete from mounts_view where session_id=? and path=?"); + $sth->execute($sid, $path); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_insertmount +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $path = shift or die "argument \"path\" missing"; + my $client = shift or die "argument \"client\" missing"; + my $sth=$dbh->prepare("insert into mounts (session_id, path, client) values (?, ?, ?)"); + $sth->execute($sid, $path, $client); + check_error($sth, 0); + my $success = (!($sth->err())); + $sth->finish(); + undef $dbh; + return $success; +} + +sub db_insertsession +{ + my $dbh = init_db(); + my $display = shift or die "argument \"display\" missing"; + $display = sanitizer('num', $display) or die "argument \"display\" malformed"; + my $server = shift or die "argument \"server\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $sth=$dbh->prepare("insert into sessions + (display, server, uname, session_id) + values + (?, ?, ?, ?)"); + $sth->execute($display, $server, $uname, $sid); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_insertshadowsession +{ + my $dbh = init_db(); + my $display = shift or die "argument \"display\" missing"; + $display = sanitizer('num', $display) or die "argument \"display\" malformed"; + my $server = shift or die "argument \"server\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $shadreq_user = shift or die "argument \"shadreq_user\" missing"; + my $sth=$dbh->prepare("insert into sessions + (display, server, uname, session_id) + values + (?, ?, ?, ?)"); + $sth->execute($display, $server, $shadreq_user, $sid); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_createsession +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $cookie = shift or die "argument \"cookie\" missing"; + my $pid = shift or die "argument \"pid\" missing"; + $pid = sanitizer('num', $pid) or die "argument \"pid\" malformed"; + my $client = shift or die "argument \"client\" missing"; + my $gr_port = shift or die "argument \"gr_port\" missing"; + $gr_port = sanitizer('num', $gr_port) or die "argument \"gr_port\" malformed"; + my $snd_port = shift or die "argument \"snd_port\" missing"; + $snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed"; + my $fs_port = shift or die "argument \"fs_port\" missing"; + $fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed"; + my $sth; + die "sessions_view must be implemented first!"; + if ($with_TeKi) { + my $tekictrl_port = shift or die "argument \"tekictrl_port\" missing"; + $tekictrl_port = sanitizer('pnnum', $tekictrl_port) or die "argument \"tekictrl_port\" malformed"; + my $tekidata_port = shift or die"argument \"tekidata_port\" missing"; + $tekidata_port = sanitizer('pnnum', $tekidata_port) or die "argument \"tekidata_port\" malformed"; + $sth=$dbh->prepare("update sessions_view set + status='R', last_time=NOW(), + cookie=?, agent_pid=?, client=?, gr_port=?, + sound_port=?, fs_port=?, tekictrl_port=?, + tekidata_port=? + where session_id=?"); + $sth->execute($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid); + } else { + $sth=$dbh->prepare("update sessions_view set + status='R', last_time=NOW(), + cookie=?, agent_pid=?, client=?, gr_port=?, + sound_port=?, fs_port=? + where session_id=?"); + $sth->execute($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $sid); + } + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_insertport +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $sshport = shift or die "argument \"port\" missing"; + my $sth=$dbh->prepare("insert into used_ports (server,session_id,port) values (?, ?, ?)"); + $sth->execute($server, $sid, $sshport); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_rmport +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $sshport = shift or die "argument \"port\" missing"; + my $sth=$dbh->prepare("delete from used_ports where server=? and session_id=? and port=?"); + $sth->execute($server, $sid, $sshport); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_resume +{ + my $dbh = init_db(); + my $client = shift or die "argument \"client\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $gr_port = shift or die "argument \"gr_port\" missing"; + $gr_port = sanitizer('num', $gr_port) or die "argument \"gr_port\" malformed"; + my $snd_port = shift or die "argument \"snd_port\" missing"; + $snd_port = sanitizer('num', $snd_port) or die "argument \"snd_port\" malformed"; + my $fs_port = shift or die "argument \"fs_port\" missing"; + $fs_port = sanitizer('num', $fs_port) or die "argument \"fs_port\" malformed"; + my $sth; + die "sessions_view must be implemented first!"; + if ($with_TeKi) { + my $tekictrl_port = shift or die "argument \"tekictrl_port\" missing"; + $tekictrl_port = sanitizer('pnnum', $tekictrl_port) or die "argument \"tekictrl_port\" malformed"; + my $tekidata_port = shift or die "argument \"tekidata_port\" missing"; + $tekidata_port = sanitizer('pnnum', $tekidata_port) or die "argument \"tekidata_port\" malformed"; + $sth=$dbh->prepare("update sessions_view set + last_time=NOW(), status='R', client=?, gr_port=?, + sound_port=?, fs_port=?, tekictrl_port=?, + tekidata_port=? + where session_id=?"); + $sth->execute($client, $gr_port, $snd_port, $fs_port, $tekictrl_port, $tekidata_port, $sid); + } else { + $sth=$dbh->prepare("update sessions_view set + last_time=NOW(), status='R', client=?, gr_port=?, + sound_port=?, fs_port=? + where session_id=?"); + $sth->execute($client, $gr_port, $snd_port, $fs_port, $sid); + } + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_changestatus +{ + my $dbh = init_db(); + my $status = shift or die "argument \"status\" missing"; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("update sessions_view set last_time=NOW(), status=? where session_id=?"); + $sth->execute($status, $sid); + check_error($sth); + $sth->finish(); + undef $dbh; + return 1; +} + +sub db_getstatus +{ + my $dbh = init_db(); + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + my $status = ''; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("select status from sessions_view where session_id=?"); + $sth->execute($sid); + check_error($sth); + $status = fetchrow_array_single_single($sth); + $sth->finish(); + undef $dbh; + return $status; +} + +sub db_getdisplays +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my @displays; + die "servers_view must be implemented first!"; + my $sth=$dbh->prepare("select display from servers_view where server=?"); + $sth->execute($server); + check_error($sth); + @displays = fetchrow_array_datasets_single_framed($sth); + $sth->finish(); + undef $dbh; + return @displays; +} + +sub db_getports +{ + my $dbh = init_db(); + my @ports; + my $server = shift or die "argument \"server\" missing"; + die "ports_view must be implemented first!"; + my $sth=$dbh->prepare("select port from ports_view where server=?"); + $sth->execute($server); + check_error($sth); + @ports = fetchrow_array_datasets_single_framed($sth); + $sth->finish(); + undef $dbh; + return @ports; +} + +sub db_getservers +{ + my $dbh = init_db(); + my @servers; + die "servers_view must be implemented first!"; + my $sth=$dbh->prepare("select server,count(*) from servers_view where status!='F' group by server"); + $sth->execute(); + check_error($sth); + @servers = fetchrow_array_datasets_double_spacelim($sth); + $sth->finish(); + undef $dbh; + return @servers; +} + +sub db_getagent +{ + my $dbh = init_db(); + my $agent; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("select + agent_pid + from sessions_view + where session_id=?"); + $sth->execute($sid); + check_error($sth); + $agent = fetchrow_array_single_single($sth); + $sth->finish(); + undef $dbh; + return $agent; +} + +sub db_getdisplay +{ + my $dbh = init_db(); + my $display; + my $sid = shift or die "argument \"session_id\" missing"; + $sid = sanitizer('x2gosid', $sid) or die "argument \"session_id\" malformed"; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("select + display + from sessions_view + where session_id=?"); + $sth->execute($sid); + check_error($sth); + $display = fetchrow_array_single_single($sth); + $sth->finish(); + undef $dbh; + return $display; +} + +sub db_listsessions +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my @sessions; + my $sth; + die "sessions_view must be implemented first!"; + if ($with_TeKi) { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port, tekictrl_port, tekidata_port + from sessions_view + where status!='F' and server=? and (session_id not like '%XSHAD%') + order by status desc"); + } else { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions_view + where status!='F' and server=? and (session_id not like '%XSHAD%') + order by status desc"); + } + $sth->execute($server); + check_error($sth); + @sessions = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @sessions; +} + +sub db_listsessions_all +{ + my $dbh = init_db(); + my @sessions; + my $sth; + die "sessions_view must be implemented first!"; + if ($with_TeKi) { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port, tekictrl_port, tekidata_port + from sessions_view + where status!='F' and (session_id not like '%XSHAD%') + order by status desc"); + } else { + $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions_view + where status!='F' and (session_id not like '%XSHAD%') + order by status desc"); + } + $sth->execute(); + check_error($sth); + @sessions = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @sessions; +} + +sub db_listshadowsessions +{ + my $dbh = init_db(); + my $server = shift or die "argument \"server\" missing"; + my @sessions; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions_view + where status!='F' and server=? and (session_id like '%XSHAD%') + order by status desc"); + $sth->execute($server); + check_error($sth); + @sessions = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @sessions; +} + +sub db_listshadowsessions_all +{ + my $dbh = init_db(); + my @sessions; + die "sessions_view must be implemented first!"; + my $sth=$dbh->prepare("select + agent_pid, session_id, display, server, status, + DATE_FORMAT(init_time, '%Y-%m-%dT%H:%i:%S'), cookie, client, + gr_port, sound_port, + DATE_FORMAT(last_time, '%Y-%m-%dT%H:%i:%S'), uname, + MOD(UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(init_time), 86400), + fs_port + from sessions_view + where status!='F' and (session_id is like '%XSHAD%') + order by status desc"); + $sth->execute(); + check_error($sth); + @sessions = fetchrow_array_datasets($sth); + $sth->finish(); + undef $dbh; + return @sessions; +} + +1; diff --git a/debian/changelog b/debian/changelog index ed9b5d5..ff8bca6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -92,6 +92,9 @@ x2goserver (4.1.0.1-0x2go1) UNRELEASED; urgency=medium - X2Go/Server/DB/PostgreSQL.pm: fix syntax error. - x2goserver/sbin/x2godbadmin: don't use prototypes when functions actually take arguments. + - X2Go/Server/DB: add new file MySQL.pm, implementing the MySQL session + storage backend. Based on original code by Walid Moghrabi, but modified. + Will fail to execute correctly, so do not use yet. * debian/{control,compat}: + Bump DH compat level to 9. * debian/: -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch feature/mysql-backend in repository x2goserver. commit 8d5383fcfe446436fab740814ded83609e02f57d Author: Mihai Moldovan <ionic@ionic.de> Date: Sat Feb 24 23:21:54 2018 +0100 x2goserver/sbin/x2godbadmin: don't use prototypes when functions actually take arguments. --- debian/changelog | 2 ++ x2goserver/sbin/x2godbadmin | 28 ++++++++++++++-------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/debian/changelog b/debian/changelog index 9cc05f7..ed9b5d5 100644 --- a/debian/changelog +++ b/debian/changelog @@ -90,6 +90,8 @@ x2goserver (4.1.0.1-0x2go1) UNRELEASED; urgency=medium - x2goserver/sbin/x2godbadmin: no need to specify or use database for list_users operation. - X2Go/Server/DB/PostgreSQL.pm: fix syntax error. + - x2goserver/sbin/x2godbadmin: don't use prototypes when functions + actually take arguments. * debian/{control,compat}: + Bump DH compat level to 9. * debian/: diff --git a/x2goserver/sbin/x2godbadmin b/x2goserver/sbin/x2godbadmin index 75761ec..d47397e 100755 --- a/x2goserver/sbin/x2godbadmin +++ b/x2goserver/sbin/x2godbadmin @@ -510,7 +510,7 @@ if ($Config->param("backend") eq 'mysql') } } -sub create_tables() +sub create_tables { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -540,7 +540,7 @@ sub create_tables() } } -sub pg_create_tables() +sub pg_create_tables { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -729,7 +729,7 @@ sub pg_create_tables() undef $dbh; } -sub mysql_create_tables() +sub mysql_create_tables { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -810,7 +810,7 @@ sub mysql_create_tables() undef $dbh; } -sub create_database() +sub create_database { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -873,7 +873,7 @@ sub pg_create_database undef $dbh; } -sub mysql_create_database() +sub mysql_create_database { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -905,7 +905,7 @@ sub mysql_create_database() undef $dbh; } -sub list_users() +sub list_users { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -930,7 +930,7 @@ sub list_users() } } -sub pg_list_users() +sub pg_list_users { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -953,7 +953,7 @@ sub pg_list_users() undef $dbh; } -sub mysql_list_users() +sub mysql_list_users { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -975,7 +975,7 @@ sub mysql_list_users() undef $dbh; } -sub add_user() +sub add_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -1005,7 +1005,7 @@ sub add_user() } } -sub pg_add_user() +sub pg_add_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -1090,7 +1090,7 @@ sub pg_add_user() chown($uid,$pgid,"$dir/.x2go/pgsqlpass"); } -sub mysql_add_user() +sub mysql_add_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -1155,7 +1155,7 @@ sub mysql_add_user() chown($uid,$pgid,"$dir/.x2go/mysqlpass"); } -sub rm_user() +sub rm_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -1185,7 +1185,7 @@ sub rm_user() } } -sub pg_rm_user() +sub pg_rm_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; @@ -1227,7 +1227,7 @@ sub pg_rm_user() } } -sub mysql_rm_user() +sub mysql_rm_user { my $host = shift or die "No host parameter supplied"; my $port = shift or die "No port parameter supplied"; -- Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git