The branch, master has been updated via 26ca613e9d48e6368805f1a7aad471dead9cfc71 (commit) from c8c54cd38251c843d97e13776b47b75e51e6cb1f (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 ----------------------------------------------------------------- commit 26ca613e9d48e6368805f1a7aad471dead9cfc71 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Tue Jul 19 16:00:34 2011 +0200 Tab'ified (forgotten) scripts in /usr/sbin. ----------------------------------------------------------------------- Summary of changes: debian/changelog | 1 + x2goserver/sbin/x2gocleansessions | 146 +++--- x2goserver/sbin/x2godbadmin | 894 +++++++++++++++++++------------------ 3 files changed, 539 insertions(+), 502 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index 3120baf..dcb4e66 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ x2goserver (3.0.99.5-0~x2go3) UNRELEASED; urgency=low * Switch to setgid instead of setuid for SQLite wrapper. * Tab'ified postinst/postrm scripts. * Store SQLite db in /var/lib/x2go to comply to latest FHS. + * Tab'ified (forgotten) scripts in /usr/sbin. [Martin Oehler] * Removes old debug code fragment, fixes x2golistsessions parsing. diff --git a/x2goserver/sbin/x2gocleansessions b/x2goserver/sbin/x2gocleansessions index 14c38ac..1b99474 100755 --- a/x2goserver/sbin/x2gocleansessions +++ b/x2goserver/sbin/x2gocleansessions @@ -25,41 +25,40 @@ use strict; sub check_pid { - my $pid=shift; - my $sess=shift; - my $sec=shift; - if($sec < 30) - { - return 1; - } - open (F,"</proc/$pid/cmdline") or return 0; - my $text=<F>; - close (F); - if($text =~ m/$sess/) - { - return 1; - } - return 0; + my $pid=shift; + my $sess=shift; + my $sec=shift; + if ($sec < 30) + { + return 1; + } + open (F,"</proc/$pid/cmdline") or return 0; + my $text=<F>; + close (F); + if ($text =~ m/$sess/) + { + return 1; + } + return 0; } sub check_stat { - my $sess=shift; - my $user=shift; - my $log="~$user/.x2go/C-$sess/session.log"; - my $text=`tail -1 $log`; - if($text =~ m/Session suspended/) - { - return 0; - } - return 1; + my $sess=shift; + my $user=shift; + my $log="~$user/.x2go/C-$sess/session.log"; + my $text=`tail -1 $log`; + if ($text =~ m/Session suspended/) + { + return 0; + } + return 1; } - sub catch_term { - unlink("/var/run/x2goserver.pid"); - exit; + unlink("/var/run/x2goserver.pid"); + exit; } my $uname; @@ -68,59 +67,56 @@ my $serv = hostname; my $pid = fork(); if (not defined $pid) { - print "resources not avilable.\n"; + print "resources not avilable.\n"; } elsif ($pid != 0) { - open (F,">/var/run/x2goserver.pid"); - print F "$pid\n"; - close(F); + open (F,">/var/run/x2goserver.pid"); + print F "$pid\n"; + close(F); } elsif ($pid == 0 ) { + close(STDIN); + close(STDOUT); + close(STDERR); - close(STDIN); - close(STDOUT); - close(STDERR); - - $SIG{TERM}=\&catch_term; - - while(sleep 5) - { - $serv=`hostname`; - my $outp=`x2golistsessions_sql $serv 2>/dev/null`; - - my @outp=split("\n","$outp"); + $SIG{TERM}=\&catch_term; - for(my $i=0;$i<@outp;$i++) - { - my @sinfo=split('\\|',"@outp[$i]"); - if(@sinfo[4]eq 'F') - { - #print "@sinfo[1], is blocked\n"; - #print "(@sinfo[1])Unmounting all shares\n"; - system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); - } - elsif(! check_pid (@sinfo[0],@sinfo[1],@sinfo[12])) - { - system("su @sinfo[11] -c \"x2gochangestatus 'F' @sinfo[1] \" > /dev/null"); - #print "@sinfo[1], pid @sinfo[0] not exist, changing status from @sinfo[4] to F\n"; - #print "(@sinfo[1])Unmounting all shares\n"; - system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); - } - else - { - if(@sinfo[4]eq 'R') - { - if(!check_stat(@sinfo[1],@sinfo[11])) - { - system("su @sinfo[11] -c \"x2gochangestatus 'S' @sinfo[1] \" > /dev/null"); - #print "@sinfo[1], is suspended, changing status from @sinfo[4] to S\n"; - #print "(@sinfo[1])Unmounting all shares\n"; - system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); - } - } - } - } - } -} \ No newline at end of file + while(sleep 5) + { + $serv=`hostname`; + my $outp=`x2golistsessions_sql $serv 2>/dev/null`; + my @outp=split("\n","$outp"); + for (my $i=0;$i<@outp;$i++) + { + my @sinfo=split('\\|',"@outp[$i]"); + if (@sinfo[4]eq 'F') + { + #print "@sinfo[1], is blocked\n"; + #print "(@sinfo[1])Unmounting all shares\n"; + system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); + } + elsif (! check_pid (@sinfo[0],@sinfo[1],@sinfo[12])) + { + system("su @sinfo[11] -c \"x2gochangestatus 'F' @sinfo[1] \" > /dev/null"); + #print "@sinfo[1], pid @sinfo[0] not exist, changing status from @sinfo[4] to F\n"; + #print "(@sinfo[1])Unmounting all shares\n"; + system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); + } + else + { + if (@sinfo[4]eq 'R') + { + if (!check_stat(@sinfo[1],@sinfo[11])) + { + system("su @sinfo[11] -c \"x2gochangestatus 'S' @sinfo[1] \" > /dev/null"); + #print "@sinfo[1], is suspended, changing status from @sinfo[4] to S\n"; + #print "(@sinfo[1])Unmounting all shares\n"; + system( "su @sinfo[11] -c \"export HOSTNAME && x2goumount-session @sinfo[1]\" 2> /dev/null"); + } + } + } + } + } +} diff --git a/x2goserver/sbin/x2godbadmin b/x2goserver/sbin/x2godbadmin index 35dd8ed..b03e6aa 100755 --- a/x2goserver/sbin/x2godbadmin +++ b/x2goserver/sbin/x2godbadmin @@ -24,16 +24,15 @@ use strict; use Getopt::Long; use Config::Simple; -use DBI; - - +use DBI; + 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 --listusers\n". - "x2godbadmin --adduser|rmuser <UNIX user>\n". - "x2godbadmin --addgroup|rmgroup <UNIX group>\n"; + 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 --listusers\n". + "x2godbadmin --adduser|rmuser <UNIX user>\n". + "x2godbadmin --addgroup|rmgroup <UNIX group>\n"; } my $help=''; @@ -49,449 +48,490 @@ GetOptions('listusers' => \$listusers, 'createdb' => \$createdb, 'help' => \$hel if ($help || ! ( $createdb || $adduser || $rmuser || $addgroup || $rmgroup || $listusers)) { - show_usage(); - exit(0); + show_usage(); + exit(0); } - my $Config = new Config::Simple(syntax=>'ini'); $Config->read('/etc/x2go/x2gosql/sql' ) or die "Can't read config file /etc/x2go/x2gosql/sql"; -if($Config->param("backend") eq 'sqlite') + +if ($Config->param("backend") eq 'sqlite') +{ +my $user="x2gouser"; + my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user); + my $dbfile="$dir/x2go_sessions"; + + if (! $uid) + { + print "Can not find user ($user)\n"; + exit(-1); + } + + if ($listusers|| $adduser||$addgroup||$rmuser||$rmgroup) + { + print "Only \"--createdb\" option is available with sqlite backend\n"; + exit(0); + } + if ($createdb) + { + if (! -d "$dir" ) + { + mkdir("$dir"); + } + if ( -e $dbfile) + { + unlink($dbfile); + } + my $dbh=DBI->connect("dbi:SQLite:dbname=$dbfile","","",{AutoCommit => 1}) or die $_; + + my $sth=$dbh->prepare(" + create table sessions( + session_id varchar(500) primary key, + display integer not null, + uname varchar(100) not null, + server varchar(100) not null, + client inet, + status char(1) not null default 'R', + init_time timestamp not null default CURRENT_TIMESTAMP, + last_time timestamp not null default CURRENT_TIMESTAMP, + cookie char(33), + agent_pid int, + gr_port int, + sound_port int, + fs_port int, + unique(display)) + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + create table messages(mess_id varchar(20) primary key, message text) + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + create table user_messages( + mess_id varchar(20) not null, + uname varchar(100) not null) + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + create table used_ports( + server varchar(100) not null, + session_id varchar(500) references sessions on delete cascade, + port integer primary key) + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + create table mounts( + session_id varchar(500) references sessions on delete restrict, + path varchar(512) not null, + client inet not null, + primary key(path,client)) + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + CREATE TRIGGER fkd_mounts_session_id + BEFORE DELETE ON sessions + FOR EACH ROW BEGIN + SELECT CASE + WHEN ((SELECT session_id FROM mounts WHERE session_id = OLD.session_id) IS NOT NULL) + THEN RAISE(ABORT, 'delete on table \"sessions\" violates foreign key on table \"mounts\"') + END; + END; + "); + $sth->execute() or die; + + my $sth=$dbh->prepare(" + CREATE TRIGGER fkd_ports_session_id + BEFORE DELETE ON sessions + FOR EACH ROW + BEGIN + DELETE FROM used_ports WHERE session_id = OLD.session_id; + END; + END; + "); + $sth->execute() or die; + + $sth->finish(); + $dbh->disconnect(); + chmod(0770, "$dir"); + chown('root',$pgid,"$dir"); + chmod(0660, "$dbfile"); + chown('root',$pgid,"$dbfile"); + + exit(0); + } +} + +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=`makepasswd`; +chomp ($x2goadminpass); +my $db="x2go_sessions"; + +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); + +my $dbh; +if ($createdb) { - my $user="x2gouser"; - my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user); - my $dbfile="$dir/x2go_sessions"; - - if(! $uid) - { - print "Can not find user ($user)\n"; - exit(-1); - } - - - - if($listusers|| $adduser||$addgroup||$rmuser||$rmgroup) - { - print "Only \"--createdb\" option is available with sqlite backend\n"; - exit(0); - } - if($createdb) - { - if (! -d "$dir" ) - { - mkdir("$dir"); - } - if( -e $dbfile) - { - unlink($dbfile); - } - my $dbh=DBI->connect( - "dbi:SQLite:dbname=$dbfile","","",{AutoCommit => 1}) or die $_; - - my $sth=$dbh->prepare("create table sessions( - session_id varchar(500) primary key, - display integer not null, - uname varchar(100) not null, - server varchar(100) not null, - client inet, - status char(1) not null default 'R', - init_time timestamp not null default CURRENT_TIMESTAMP, - last_time timestamp not null default CURRENT_TIMESTAMP, - cookie char(33), - agent_pid int, - gr_port int, - sound_port int, - fs_port int, - unique(display))"); - $sth->execute() or die; - - my $sth=$dbh->prepare("create table messages(mess_id varchar(20) primary key, message text)"); - $sth->execute() or die; - - my $sth=$dbh->prepare("create table user_messages( - mess_id varchar(20) not null, - uname varchar(100) not null)"); - $sth->execute() or die; - - my $sth=$dbh->prepare("create table used_ports( - server varchar(100) not null, - session_id varchar(500) references sessions on delete cascade, - port integer primary key)"); - $sth->execute() or die; - - my $sth=$dbh->prepare("create table mounts( - session_id varchar(500) references sessions on delete restrict, - path varchar(512) not null, - client inet not null, - primary key(path,client))"); - $sth->execute() or die; - - my $sth=$dbh->prepare("CREATE TRIGGER fkd_mounts_session_id - BEFORE DELETE ON sessions - FOR EACH ROW BEGIN - SELECT CASE - WHEN ((SELECT session_id FROM mounts WHERE session_id = OLD.session_id) IS NOT NULL) - THEN RAISE(ABORT, 'delete on table \"sessions\" violates foreign key on table \"mounts\"') - END; - END;"); - $sth->execute() or die; - - my $sth=$dbh->prepare("CREATE TRIGGER fkd_ports_session_id - BEFORE DELETE ON sessions - FOR EACH ROW - BEGIN - DELETE FROM used_ports WHERE session_id = OLD.session_id; - END; - END;"); - $sth->execute() or die; - - $sth->finish(); - $dbh->disconnect(); - chmod(0770, "$dir"); - chown('root',$pgid,"$dir"); - chmod(0660, "$dbfile"); - chown('root',$pgid,"$dbfile"); - - exit(0); - } + $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; + create_database(); + $dbh->disconnect(); + $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; + create_tables(); + $dbh->disconnect(); + exit(0); } - 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=`makepasswd`; - chomp($x2goadminpass); - my $db="x2go_sessions"; - - 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); - - my $dbh; - if($createdb) - { - $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; - create_database(); - $dbh->disconnect(); - $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; - create_tables(); - $dbh->disconnect(); - exit(0); - } - - if($listusers) - { - $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; - list_users(); - $dbh->disconnect(); - exit(0); - } - - $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; - if($adduser) - { +if ($listusers) +{ + $dbh=DBI->connect("dbi:Pg:dbname=postgres;host=$host;port=$port;sslmode=$sslmode", "$dbadmin", "$dbadminpass",{AutoCommit => 1}) or die $_; + list_users(); + $dbh->disconnect(); + exit(0); +} + +$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($addgroup) - { - my ($name, $passwd, $gid, $members) = getgrnam( $addgroup); - my @grp_members=split(' ',$members); - foreach (@grp_members) - { - chomp($_); - add_user($_); - } - } - - if($rmuser) - { - rm_user($rmuser); - } - - if($rmgroup) - { - my ($name, $passwd, $gid, $members) = getgrnam( $rmgroup); - my @grp_members=split(' ',$members); - foreach (@grp_members) - { - chomp($_); - rm_user($_); - } - } - $dbh->disconnect(); +} + +if ($addgroup) +{ + my ($name, $passwd, $gid, $members) = getgrnam( $addgroup); + my @grp_members=split(' ',$members); + foreach (@grp_members) + { + chomp($_); + add_user($_); + } +} + +if ($rmuser) +{ + rm_user($rmuser); +} + +if ($rmgroup) +{ + my ($name, $passwd, $gid, $members) = getgrnam( $rmgroup); + my @grp_members=split(' ',$members); + foreach (@grp_members) + { + chomp($_); + rm_user($_); + } +} +$dbh->disconnect(); sub list_users() { - 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_@data[0]\n",@data[0]); - } - $sth->finish(); + 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_@data[0]\n",@data[0]); + } + $sth->finish(); } sub rm_user() { - my $user=shift; - - print ("rm DB user x2gouser_$user\n"); - - my $sth=$dbh->prepare("DROP OWNED BY x2gouser_$user"); - $sth->execute(); - - 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"); - } + my $user=shift; + + print ("rm DB user x2gouser_$user\n"); + + my $sth=$dbh->prepare("DROP OWNED BY x2gouser_$user"); + $sth->execute(); + + 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(! $uid) - { - print "Can not find user ($user)\n"; - return; - } - $pass=`makepasswd`; - chomp($pass); - - 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, UPDATE, DELETE ON sessions_view, mounts_view, servers_view, ports_view TO x2gouser_$user"); - $sth->execute(); - $sth->finish(); - - if (! -d "$dir/.x2go" ) - { - mkdir("$dir/.x2go"); - } - #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"); + my $user=shift; + my ($name, $pass, $uid, $pgid, $quota, $comment, $gcos, $dir, $shell, $expire) = getpwnam($user); + if (! $uid) + { + print "Can not find user ($user)\n"; + return; + } + $pass=`makepasswd`; + chomp($pass); + + 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, UPDATE, DELETE ON sessions_view, mounts_view, servers_view, ports_view TO x2gouser_$user"); + $sth->execute(); + $sth->finish(); + + if (! -d "$dir/.x2go" ) + { + mkdir("$dir/.x2go"); + } + + #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"); } sub create_tables() { - 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, - 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 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 - 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(); + 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, + 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 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 + 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(); } sub create_database { - #drop db if exists - my $sth=$dbh->prepare("drop database if exists x2go_sessions"); - $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(); -} \ No newline at end of file + #drop db if exists + my $sth=$dbh->prepare("drop database if exists x2go_sessions"); + $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(); +} 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).