[X2Go-Commits] [x2goserver] 01/04: x2goserver/sbin/x2godbadmin: wrap PostgreSQL code in own block, should not have any functional impact.
git-admin at x2go.org
git-admin at x2go.org
Fri Feb 23 23:17:41 CET 2018
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 80a47aefd1208a3adedcaca1cf483c2db220e554
Author: Mihai Moldovan <ionic at ionic.de>
Date: Fri Feb 23 22:02:05 2018 +0100
x2goserver/sbin/x2godbadmin: wrap PostgreSQL code in own block, should not have any functional impact.
---
debian/changelog | 2 +
x2goserver/sbin/x2godbadmin | 897 ++++++++++++++++++++++----------------------
2 files changed, 452 insertions(+), 447 deletions(-)
diff --git a/debian/changelog b/debian/changelog
index 8725910..fc4a885 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -65,6 +65,8 @@ x2goserver (4.1.0.1-0x2go1) UNRELEASED; urgency=medium
- X2Go/Server/DB.pm: add high-level MySQL/MariaDB support. References the
X2Go::Server::DB::MySQL module (and functions/subroutines in there)
which currently does not yet exist.
+ - x2goserver/sbin/x2godbadmin: wrap PostgreSQL code in own block, should
+ not have any functional impact.
* debian/{control,compat}:
+ Bump DH compat level to 9.
* debian/:
diff --git a/x2goserver/sbin/x2godbadmin b/x2goserver/sbin/x2godbadmin
index 4eab3e9..1a2683e 100755
--- a/x2goserver/sbin/x2godbadmin
+++ b/x2goserver/sbin/x2godbadmin
@@ -230,499 +230,502 @@ if ($Config->param("backend") eq 'sqlite')
}
}
-my $host=$Config->param("postgres.host");
-my $port=$Config->param("postgres.port");
-my $sslmode=$Config->param("postgres.ssl");
-if (!$sslmode)
+if ($Config->param("backend") eq 'postgres')
{
- $sslmode="prefer";
-}
-my $dbadmin=$Config->param("postgres.dbadmin");
-my $x2goadmin="x2godbuser";
-my $x2goadminpass=`pwgen 8 1`;
-chomp ($x2goadminpass);
-my $db="x2go_sessions";
+ my $host=$Config->param("postgres.host");
+ my $port=$Config->param("postgres.port");
+ my $sslmode=$Config->param("postgres.ssl");
+ if (!$sslmode)
+ {
+ $sslmode="prefer";
+ }
+ my $dbadmin=$Config->param("postgres.dbadmin");
+ my $x2goadmin="x2godbuser";
+ my $x2goadminpass=`pwgen 8 1`;
+ chomp ($x2goadminpass);
+ my $db="x2go_sessions";
-if (!$host)
-{
- $host='localhost';
-}
-if (!$port)
-{
- $port='5432';
-}
-if (!$dbadmin)
-{
- $dbadmin='postgres';
-}
+ if (!$host)
+ {
+ $host='localhost';
+ }
+ if (!$port)
+ {
+ $port='5432';
+ }
+ if (!$dbadmin)
+ {
+ $dbadmin='postgres';
+ }
-open (FL,"< /etc/x2go/x2gosql/passwords/pgadmin ") or die "Can't read password file /etc/x2go/x2gosql/passwords/pgadmin";
-my $dbadminpass=<FL>;
-close(FL);
-chomp($dbadminpass);
+ open (FL,"< /etc/x2go/x2gosql/passwords/pgadmin ") or die "Can't read password file /etc/x2go/x2gosql/passwords/pgadmin";
+ my $dbadminpass=<FL>;
+ close(FL);
+ chomp($dbadminpass);
-if ($updatedb)
-{
- # check if the DB already exists, if not, create it...
- my $dbh;
- until (
- $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1, RaiseError => 0, PrintError => 0})
- )
+ if ($updatedb)
{
- $createdb = 1;
- last;
- };
- if (!$createdb) {
- $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1});
- if ($dbh) {
- my $update_views_n_rules = 0;
- my $sth_tekictrl;
- my $sth_tekidata;
- my $sth_update;
- try {
- $sth_tekictrl = $dbh->prepare("select tekictrl_port from sessions");
- $sth_tekictrl->execute();
- }
- catch
- {
- print "ADDING: tekictrl_port column to table sessions\n";
- $sth_tekictrl = $dbh->prepare("
- alter table sessions
- add column tekictrl_port int
- ");
- $sth_tekictrl->execute() or die;
- $sth_tekictrl->finish();
- $update_views_n_rules = 1;
- };
- try {
- $sth_tekidata = $dbh->prepare("select tekidata_port from sessions");
- $sth_tekidata->execute();
+ # check if the DB already exists, if not, create it...
+ my $dbh;
+ until (
+ $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1, RaiseError => 0, PrintError => 0})
+ )
+ {
+ $createdb = 1;
+ last;
+ };
+ if (!$createdb) {
+ $dbh = DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1});
+ if ($dbh) {
+ my $update_views_n_rules = 0;
+ my $sth_tekictrl;
+ my $sth_tekidata;
+ my $sth_update;
+ try {
+ $sth_tekictrl = $dbh->prepare("select tekictrl_port from sessions");
+ $sth_tekictrl->execute();
+ }
+ catch
+ {
+ print "ADDING: tekictrl_port column to table sessions\n";
+ $sth_tekictrl = $dbh->prepare("
+ alter table sessions
+ add column tekictrl_port int
+ ");
+ $sth_tekictrl->execute() or die;
+ $sth_tekictrl->finish();
+ $update_views_n_rules = 1;
+ };
+ try {
+ $sth_tekidata = $dbh->prepare("select tekidata_port from sessions");
+ $sth_tekidata->execute();
+ }
+ catch
+ {
+ print "ADDING: tekidata_port column to table sessions\n";
+ $sth_tekidata=$dbh->prepare("
+ alter table sessions
+ add column tekidata_port int
+ ");
+ $sth_tekidata->execute() or die;
+ $sth_tekidata->finish();
+ $update_views_n_rules = 1;
+ };
+
+ if ($update_views_n_rules)
+ {
+ print "UPDATING VIEW: sessions_view\n";
+ $sth_update=$dbh->prepare("
+ create or replace 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, tekictrl_port, tekidata_port from sessions
+ where creator_id = current_user
+ ");
+ $sth_update->execute() or die;
+ print "UPDATING RULE: update_sess_view\n";
+ $sth_update=$dbh->prepare("
+ create or replace RULE update_sess_view AS ON UPDATE
+ TO sessions_view DO INSTEAD
+ update sessions set
+ status=NEW.status,
+ last_time=NEW.last_time,
+ cookie=NEW.cookie,
+ agent_pid=NEW.agent_pid,
+ client=NEW.client,
+ 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_update->execute() or die;
+ $sth_update->finish();
+ }
}
- catch
- {
- print "ADDING: tekidata_port column to table sessions\n";
- $sth_tekidata=$dbh->prepare("
- alter table sessions
- add column tekidata_port int
- ");
- $sth_tekidata->execute() or die;
- $sth_tekidata->finish();
- $update_views_n_rules = 1;
- };
-
- if ($update_views_n_rules)
- {
- print "UPDATING VIEW: sessions_view\n";
- $sth_update=$dbh->prepare("
- create or replace 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, tekictrl_port, tekidata_port from sessions
- where creator_id = current_user
- ");
- $sth_update->execute() or die;
- print "UPDATING RULE: update_sess_view\n";
- $sth_update=$dbh->prepare("
- create or replace RULE update_sess_view AS ON UPDATE
- TO sessions_view DO INSTEAD
- update sessions set
- status=NEW.status,
- last_time=NEW.last_time,
- cookie=NEW.cookie,
- agent_pid=NEW.agent_pid,
- client=NEW.client,
- 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_update->execute() or die;
- $sth_update->finish();
+ if ($dbh) {
+ undef $dbh;
}
+ exit(0);
}
- if ($dbh) {
- undef $dbh;
+ else
+ {
+ print "No session DB found. Use --createdb instead of --updatedb.\n";
}
- exit(0);
}
- else
+
+ if ($createdb)
{
- print "No session DB found. Use --createdb instead of --updatedb.\n";
+ create_database();
+ create_tables();
+ exit(0);
}
-}
-if ($createdb)
-{
- create_database();
- create_tables();
- exit(0);
-}
-
-if ($listusers)
-{
- list_users();
- exit(0);
-}
-
-my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
-if ($adduser)
-{
- add_user($adduser);
-}
+ if ($listusers)
+ {
+ list_users();
+ exit(0);
+ }
-if ($addgroup)
-{
- my ($name, $passwd, $gid, $members) = getgrnam( $addgroup);
- my @grp_members=split(' ',$members);
- foreach (@grp_members)
+ my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
+ if ($adduser)
{
- chomp($_);
- add_user($_);
+ add_user($adduser);
}
-}
-if ($rmuser)
-{
- rm_user($rmuser);
-}
+ if ($addgroup)
+ {
+ my ($name, $passwd, $gid, $members) = getgrnam( $addgroup);
+ my @grp_members=split(' ',$members);
+ foreach (@grp_members)
+ {
+ chomp($_);
+ add_user($_);
+ }
+ }
-if ($rmgroup)
-{
- my ($name, $passwd, $gid, $members) = getgrnam( $rmgroup);
- my @grp_members=split(' ',$members);
- foreach (@grp_members)
+ if ($rmuser)
{
- chomp($_);
- rm_user($_);
+ rm_user($rmuser);
}
-}
-undef $dbh;
-sub list_users()
-{
- my $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
- my $sth=$dbh->prepare("select rolname from pg_roles where rolname like 'x2gouser_%'");
- $sth->execute()or die;
- printf ("%-20s DB user\n","UNIX user");
- print "---------------------------------------\n";
- my @data;
- while (@data = $sth->fetchrow_array)
+ if ($rmgroup)
{
- @data[0]=~s/x2gouser_//;
- printf ("%-20s x2gouser_ at data[0]\n", at data[0]);
+ my ($name, $passwd, $gid, $members) = getgrnam( $rmgroup);
+ my @grp_members=split(' ',$members);
+ foreach (@grp_members)
+ {
+ chomp($_);
+ rm_user($_);
+ }
}
- $sth->finish();
undef $dbh;
-}
-sub rm_user()
-{
- my $user=shift;
+ sub list_users()
+ {
+ my $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
+ my $sth=$dbh->prepare("select rolname from pg_roles where rolname like 'x2gouser_%'");
+ $sth->execute()or die;
+ printf ("%-20s DB user\n","UNIX user");
+ print "---------------------------------------\n";
+ my @data;
+ while (@data = $sth->fetchrow_array)
+ {
+ @data[0]=~s/x2gouser_//;
+ printf ("%-20s x2gouser_ at data[0]\n", at data[0]);
+ }
+ $sth->finish();
+ undef $dbh;
+ }
- print ("rm DB user \"x2gouser_$user\"\n");
+ sub rm_user()
+ {
+ my $user=shift;
- my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions, used_ports, mounts FROM \"x2gouser_$user\"");
- $sth->execute();
+ print ("rm DB user \"x2gouser_$user\"\n");
- my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions_view, mounts_view, servers_view, ports_view FROM \"x2gouser_$user\"");
- $sth->execute();
+ my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions, used_ports, mounts FROM \"x2gouser_$user\"");
+ $sth->execute();
- my $sth=$dbh->prepare("DROP OWNED BY \"x2gouser_$user\"");
- $sth->execute();
+ my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions_view, mounts_view, servers_view, ports_view FROM \"x2gouser_$user\"");
+ $sth->execute();
- my $sth=$dbh->prepare("drop USER if exists \"x2gouser_$user\"");
- $sth->execute();
- $sth->finish();
+ my $sth=$dbh->prepare("DROP OWNED BY \"x2gouser_$user\"");
+ $sth->execute();
- my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user);
- if (! $uid)
- {
- return;
- }
- if ( -e "$dir/.x2go/sqlpass" )
- {
- unlink("$dir/.x2go/sqlpass");
+ my $sth=$dbh->prepare("drop USER if exists \"x2gouser_$user\"");
+ $sth->execute();
+ $sth->finish();
+
+ my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user);
+ if (! $uid)
+ {
+ return;
+ }
+ if ( -e "$dir/.x2go/sqlpass" )
+ {
+ unlink("$dir/.x2go/sqlpass");
+ }
}
-}
-sub add_user()
-{
- my $user=shift;
- my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user);
- if (! $name)
+ sub add_user()
{
- print "Cannot find user ($user)\n";
- return;
+ my $user=shift;
+ my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user);
+ if (! $name)
+ {
+ print "Cannot find user ($user)\n";
+ return;
+ }
+ elsif ($name eq "root")
+ {
+ print "The super-user \"root\" is not allowed to use X2Go\n";
+ return;
+ }
+ $pass=`pwgen 8 1`;
+ chomp($pass);
+
+ my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions, used_ports, mounts FROM \"x2gouser_$user\"");
+ $sth->{Warn}=0;
+ $sth->{PrintError}=0;
+ $sth->execute();
+
+ my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions_view, mounts_view, servers_view, ports_view FROM \"x2gouser_$user\"");
+ $sth->{Warn}=0;
+ $sth->{PrintError}=0;
+ $sth->execute();
+
+ my $sth=$dbh->prepare("DROP OWNED BY \"x2gouser_$user\"");
+ $sth->{Warn}=0;
+ $sth->{PrintError}=0;
+ $sth->execute();
+
+ $sth=$dbh->prepare("drop USER if exists \"x2gouser_$user\"");
+ $sth->{Warn}=0;
+ $sth->{PrintError}=0;
+ $sth->execute();
+
+ print ("create DB user \"x2gouser_$user\"\n");
+ $sth=$dbh->prepare("create USER \"x2gouser_$user\" WITH ENCRYPTED PASSWORD '$pass'");
+ $sth->execute();
+
+ $sth=$dbh->prepare("GRANT INSERT, UPDATE, DELETE ON sessions, used_ports, mounts TO \"x2gouser_$user\"");
+ $sth->execute();
+
+ $sth=$dbh->prepare("GRANT SELECT ON used_ports TO \"x2gouser_$user\"");
+ $sth->execute();
+
+ $sth=$dbh->prepare("GRANT SELECT, UPDATE, DELETE ON sessions_view, mounts_view, servers_view, ports_view TO \"x2gouser_$user\"");
+ $sth->execute();
+ $sth->finish();
+
+ if (! -d "$dir/.x2go" )
+ {
+ if ( defined (&File::Path::make_path) )
+ {
+ File::Path::make_path("$dir/.x2go");
+ }
+ elsif ( defined (&File::Path::mkpath) )
+ {
+ File::Path::mkpath("$dir/.x2go");
+ }
+ else
+ {
+ die "Unable to create folders with File::Path";
+ }
+ }
+
+ #save user password
+ open (FL,"> $dir/.x2go/sqlpass") or die "Can't open password file $dir/.x2go/sqlpass";
+ print FL $pass;
+ close(FL);
+ chmod(0700,"$dir/.x2go");
+ chown($uid,$pgid,"$dir/.x2go");
+ chmod(0600,"$dir/.x2go/sqlpass");
+ chown($uid,$pgid,"$dir/.x2go/sqlpass");
}
- elsif ($name eq "root")
+
+ sub create_tables()
{
- print "The super-user \"root\" is not allowed to use X2Go\n";
- return;
- }
- $pass=`pwgen 8 1`;
- chomp($pass);
+ $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
+ my $sth=$dbh->prepare("
+ create table sessions(
+ session_id text primary key,
+ display integer not null,
+ uname text not null,
+ server text not null,
+ client inet,
+ status char(1) not null default 'R',
+ init_time timestamp not null default now(),
+ last_time timestamp not null default now(),
+ cookie char(33),
+ agent_pid int,
+ gr_port int,
+ sound_port int,
+ fs_port int,
+ tekictrl_port int,
+ tekidata_port int,
+ creator_id text NOT NULL default current_user,
+ unique(display))
+ ");
+ $sth->execute() or die;
- my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions, used_ports, mounts FROM \"x2gouser_$user\"");
- $sth->{Warn}=0;
- $sth->{PrintError}=0;
- $sth->execute();
+ $sth=$dbh->prepare("
+ 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, tekictrl_port, tekidata_port from sessions
+ where creator_id = current_user
+ ");
+ $sth->execute() or die;
- my $sth=$dbh->prepare("REVOKE ALL PRIVILEGES ON sessions_view, mounts_view, servers_view, ports_view FROM \"x2gouser_$user\"");
- $sth->{Warn}=0;
- $sth->{PrintError}=0;
- $sth->execute();
+ $sth=$dbh->prepare("
+ create VIEW servers_view as
+ SELECT
+ server, display, status from sessions
+ ");
+ $sth->execute() or die;
- my $sth=$dbh->prepare("DROP OWNED BY \"x2gouser_$user\"");
- $sth->{Warn}=0;
- $sth->{PrintError}=0;
- $sth->execute();
+ $sth=$dbh->prepare("
+ create or replace RULE update_sess_priv AS ON UPDATE
+ TO sessions where (OLD.creator_id <> current_user or OLD.creator_id <> NEW.creator_id) and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
- $sth=$dbh->prepare("drop USER if exists \"x2gouser_$user\"");
- $sth->{Warn}=0;
- $sth->{PrintError}=0;
- $sth->execute();
+ $sth=$dbh->prepare("
+ create or replace RULE insert_sess_priv AS ON INSERT
+ TO sessions where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
- print ("create DB user \"x2gouser_$user\"\n");
- $sth=$dbh->prepare("create USER \"x2gouser_$user\" WITH ENCRYPTED PASSWORD '$pass'");
- $sth->execute();
+ $sth=$dbh->prepare("
+ create or replace RULE delete_sess_priv AS ON DELETE
+ TO sessions where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
- $sth=$dbh->prepare("GRANT INSERT, UPDATE, DELETE ON sessions, used_ports, mounts TO \"x2gouser_$user\"");
- $sth->execute();
+ $sth=$dbh->prepare("
+ create or replace RULE update_sess_view AS ON UPDATE
+ TO sessions_view DO INSTEAD
+ update sessions set
+ status=NEW.status,
+ last_time=NEW.last_time,
+ cookie=NEW.cookie,
+ agent_pid=NEW.agent_pid,
+ client=NEW.client,
+ 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;
- $sth=$dbh->prepare("GRANT SELECT ON used_ports TO \"x2gouser_$user\"");
- $sth->execute();
+ $sth=$dbh->prepare("create table messages(mess_id varchar(20) primary key, message text)");
+ $sth->execute() or die;
- $sth=$dbh->prepare("GRANT SELECT, UPDATE, DELETE ON sessions_view, mounts_view, servers_view, ports_view TO \"x2gouser_$user\"");
- $sth->execute();
- $sth->finish();
+ $sth=$dbh->prepare("
+ create table user_messages(
+ mess_id text not null,
+ uname text not null)
+ ");
+ $sth->execute() or die;
- if (! -d "$dir/.x2go" )
- {
- if ( defined (&File::Path::make_path) )
- {
- File::Path::make_path("$dir/.x2go");
- }
- elsif ( defined (&File::Path::mkpath) )
- {
- File::Path::mkpath("$dir/.x2go");
- }
- else
- {
- die "Unable to create folders with File::Path";
- }
- }
+ $sth=$dbh->prepare("
+ create table used_ports(
+ server text not null,
+ session_id text references sessions on delete cascade,
+ creator_id text NOT NULL default current_user,
+ port integer primary key)
+ ");
+ $sth->execute() or die;
- #save user password
- open (FL,"> $dir/.x2go/sqlpass") or die "Can't open password file $dir/.x2go/sqlpass";
- print FL $pass;
- close(FL);
- chmod(0700,"$dir/.x2go");
- chown($uid,$pgid,"$dir/.x2go");
- chmod(0600,"$dir/.x2go/sqlpass");
- chown($uid,$pgid,"$dir/.x2go/sqlpass");
-}
+ $sth=$dbh->prepare("
+ create VIEW ports_view as
+ SELECT
+ server, port from used_ports
+ ");
+ $sth->execute() or die;
-sub create_tables()
-{
- $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
- my $sth=$dbh->prepare("
- create table sessions(
- session_id text primary key,
- display integer not null,
- uname text not null,
- server text not null,
- client inet,
- status char(1) not null default 'R',
- init_time timestamp not null default now(),
- last_time timestamp not null default now(),
- cookie char(33),
- agent_pid int,
- gr_port int,
- sound_port int,
- fs_port int,
- tekictrl_port int,
- tekidata_port int,
- creator_id text NOT NULL default current_user,
- unique(display))
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- 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, tekictrl_port, tekidata_port from sessions
- where creator_id = current_user
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create VIEW servers_view as
- SELECT
- server, display, status from sessions
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE update_sess_priv AS ON UPDATE
- TO sessions where (OLD.creator_id <> current_user or OLD.creator_id <> NEW.creator_id) and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE insert_sess_priv AS ON INSERT
- TO sessions where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE delete_sess_priv AS ON DELETE
- TO sessions where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE update_sess_view AS ON UPDATE
- TO sessions_view DO INSTEAD
- update sessions set
- status=NEW.status,
- last_time=NEW.last_time,
- cookie=NEW.cookie,
- agent_pid=NEW.agent_pid,
- client=NEW.client,
- 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;
-
- $sth=$dbh->prepare("create table messages(mess_id varchar(20) primary key, message text)");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create table user_messages(
- mess_id text not null,
- uname text not null)
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create table used_ports(
- server text not null,
- session_id text references sessions on delete cascade,
- creator_id text NOT NULL default current_user,
- port integer primary key)
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create VIEW ports_view as
- SELECT
- server, port from used_ports
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE insert_port_priv AS ON INSERT
- TO used_ports where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE update_port_priv AS ON UPDATE
- TO used_ports where (NEW.creator_id <> current_user or OLD.creator_id <> current_user) and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE delete_port_priv AS ON DELETE
- TO used_ports where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create table mounts(
- session_id text references sessions on delete restrict,
- path text not null,
- client inet not null,
- creator_id text NOT NULL default current_user,
- primary key(path,client))
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create VIEW mounts_view as
- SELECT
- client,path, session_id from mounts
- where creator_id = current_user
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE delete_mounts_view AS ON DELETE
- TO mounts_view DO INSTEAD
- delete from mounts
- where session_id=OLD.session_id and creator_id=current_user and path=OLD.path
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE insert_mount_priv AS ON INSERT
- TO mounts where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE update_mount_priv AS ON UPDATE
- TO mounts where (NEW.creator_id <> current_user or OLD.creator_id <> current_user) and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("
- create or replace RULE delete_mount_priv AS ON DELETE
- TO mounts where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
- DO INSTEAD NOTHING
- ");
- $sth->execute() or die;
-
- $sth=$dbh->prepare("GRANT ALL PRIVILEGES ON sessions, messages, user_messages, used_ports, mounts TO $x2goadmin");
- $sth->execute() or die;
- $sth->finish();
- undef $dbh;
-}
+ $sth=$dbh->prepare("
+ create or replace RULE insert_port_priv AS ON INSERT
+ TO used_ports where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
-sub create_database
-{
- my $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
- #drop db if exists
- my $sth=$dbh->prepare("drop database if exists $db");
- $sth->execute();
- #drop x2goadmin
- $sth=$dbh->prepare("drop user if exists $x2goadmin");
- $sth->execute();
- #create db
- $sth=$dbh->prepare("create database $db");
- $sth->execute() or die;
- #create x2goadmin
- $sth=$dbh->prepare("create USER $x2goadmin WITH ENCRYPTED PASSWORD '$x2goadminpass'");
- $sth->execute() or die;
- #save x2goadmin password
- open (FL,"> /etc/x2go/x2gosql/passwords/x2goadmin ") or die "Can't write password file /etc/x2go/x2gosql/passwords/x2goadmin";
- print FL $x2goadminpass;
- close(FL);
- $sth->finish();
- undef $dbh;
+ $sth=$dbh->prepare("
+ create or replace RULE update_port_priv AS ON UPDATE
+ TO used_ports where (NEW.creator_id <> current_user or OLD.creator_id <> current_user) and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create or replace RULE delete_port_priv AS ON DELETE
+ TO used_ports where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create table mounts(
+ session_id text references sessions on delete restrict,
+ path text not null,
+ client inet not null,
+ creator_id text NOT NULL default current_user,
+ primary key(path,client))
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create VIEW mounts_view as
+ SELECT
+ client,path, session_id from mounts
+ where creator_id = current_user
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create or replace RULE delete_mounts_view AS ON DELETE
+ TO mounts_view DO INSTEAD
+ delete from mounts
+ where session_id=OLD.session_id and creator_id=current_user and path=OLD.path
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create or replace RULE insert_mount_priv AS ON INSERT
+ TO mounts where NEW.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create or replace RULE update_mount_priv AS ON UPDATE
+ TO mounts where (NEW.creator_id <> current_user or OLD.creator_id <> current_user) and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("
+ create or replace RULE delete_mount_priv AS ON DELETE
+ TO mounts where OLD.creator_id <> current_user and current_user <> '$x2goadmin'
+ DO INSTEAD NOTHING
+ ");
+ $sth->execute() or die;
+
+ $sth=$dbh->prepare("GRANT ALL PRIVILEGES ON sessions, messages, user_messages, used_ports, mounts TO $x2goadmin");
+ $sth->execute() or die;
+ $sth->finish();
+ undef $dbh;
+ }
+
+ sub create_database
+ {
+ my $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_;
+ #drop db if exists
+ my $sth=$dbh->prepare("drop database if exists $db");
+ $sth->execute();
+ #drop x2goadmin
+ $sth=$dbh->prepare("drop user if exists $x2goadmin");
+ $sth->execute();
+ #create db
+ $sth=$dbh->prepare("create database $db");
+ $sth->execute() or die;
+ #create x2goadmin
+ $sth=$dbh->prepare("create USER $x2goadmin WITH ENCRYPTED PASSWORD '$x2goadminpass'");
+ $sth->execute() or die;
+ #save x2goadmin password
+ open (FL,"> /etc/x2go/x2gosql/passwords/x2goadmin ") or die "Can't write password file /etc/x2go/x2gosql/passwords/x2goadmin";
+ print FL $x2goadminpass;
+ close(FL);
+ $sth->finish();
+ undef $dbh;
+ }
}
--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2goserver.git
More information about the x2go-commits
mailing list