[X2go-Commits] x2goserver.git - master (branch) updated: 3.0.99-2-115-g26ca613
X2go dev team
git-admin at x2go.org
Tue Jul 19 16:00:11 CEST 2011
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 at 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], 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