[X2Go-Commits] x2goserver.git - build-baikal (branch) updated: 3.0.99-2-115-g26ca613
X2Go dev team
git-admin at x2go.org
Wed Dec 4 06:21:22 CET 2013
The branch, build-baikal 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 -----------------------------------------------------------------
-----------------------------------------------------------------------
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], at sinfo[1], at 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], at 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], at sinfo[1], at 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], at 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_ at data[0]\n", at 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_ at data[0]\n", at 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).
More information about the x2go-commits
mailing list