[X2Go-Commits] x2goserver.git - build-baikal (branch) updated: 3.1.1.3-229-g40c674c

X2Go dev team git-admin at x2go.org
Fri Jan 3 20:53:30 CET 2014


The branch, build-baikal has been updated
       via  40c674c9e82c6217c5422aae2d86974c5949b716 (commit)
      from  da7cc13e30fb9773b0c2ab8706e5ceadb55feec8 (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:
 X2Go/Server/DB.pm                                  |   49 +++++++++++++++++++-
 X2Go/Server/DB/PostgreSQL.pm                       |   16 ++++++-
 X2Go/Server/DB/SQLite3.pm                          |   47 ++++++++++++++++++-
 debian/changelog                                   |    4 ++
 x2goserver/bin/x2gostartagent                      |   21 +++++++--
 .../{x2gocreatesession => x2gocreateshadowsession} |    5 +-
 .../{x2goinsertsession => x2goinsertshadowsession} |    5 +-
 7 files changed, 137 insertions(+), 10 deletions(-)
 copy x2goserver/lib/{x2gocreatesession => x2gocreateshadowsession} (87%)
 copy x2goserver/lib/{x2goinsertsession => x2goinsertshadowsession} (88%)

The diff of changes is:
diff --git a/X2Go/Server/DB.pm b/X2Go/Server/DB.pm
index 0f638a2..2ce7a02 100644
--- a/X2Go/Server/DB.pm
+++ b/X2Go/Server/DB.pm
@@ -63,7 +63,7 @@ if ($backend ne 'postgres' && $backend ne 'sqlite')
 use base 'Exporter';
 
 our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus', 
-             'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount', 
+             'db_getdisplays', 'db_insertsession', 'db_insertshadowsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_createshadowsession', 'db_insertmount', 
              'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot', 
              'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts', 'db_listshadowsessions','db_listshadowsessions_all');
 
@@ -210,6 +210,27 @@ sub db_insertsession
 	syslog('debug', "db_insertsession called, session ID: $sid, server: $server, session ID: $sid");
 }
 
+sub db_insertshadowsession
+{
+	my $display=shift or die "argument \"display\" missed";
+	my $server=shift or die "argument \"server\" missed";
+	my $sid=shift or die "argument \"session_id\" missed";
+	my $shadreq_user=shift or die "argument \"shadreq_user\" missed";
+	if ($backend eq 'postgres')
+	{
+		X2Go::Server::DB::PostgreSQL::db_insertshadowsession($display, $server, $sid, $shadreq_user);
+	}
+	if ($backend eq 'sqlite')
+	{
+		my $err=`$x2go_lib_path/libx2go-server-db-sqlite3-wrapper insertshadowsession $display $server $sid $shadreq_user`;
+		if ($err ne "ok")
+		{
+			die "$err: $x2go_lib_path/libx2go-server-db-sqlite3-wrapper insertshadowsession $display $server $sid $shadreq_user";
+		}
+	}
+	syslog('debug', "db_insertshadowsession called, session ID: $sid, server: $server, session ID: $sid, shadowing requesting user: $shadreq_user");
+}
+
 sub db_createsession
 {
 	my $cookie=shift or die"argument \"cookie\" missed";
@@ -234,6 +255,32 @@ sub db_createsession
 	syslog('debug', "db_createsession called, session ID: $sid, cookie: $cookie, client: $client, pid: $pid, graphics port: $gr_port, sound port: $snd_port, file sharing port: $fs_port");
 }
 
+sub db_createshadowsession
+{
+	my $cookie=shift or die"argument \"cookie\" missed";
+	my $pid=shift or die"argument \"pid\" missed";
+	my $client=shift or die"argument \"client\" missed";
+	my $gr_port=shift or die"argument \"gr_port\" missed";
+	my $snd_port=shift or die"argument \"snd_port\" missed";
+	my $fs_port=shift or die"argument \"fs_port\" missed";
+	my $sid=shift or die "argument \"session_id\" missed";
+	my $shadreq_user=shift or die "argument \"shadreq_user\" missed";
+	if ($backend eq 'postgres')
+	{
+		# for PostgreSQL we can use the normal db_createsession code...
+		X2Go::Server::DB::PostgreSQL::db_createsession($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $sid);
+	}
+	if ($backend eq 'sqlite')
+	{
+		my $err= `$x2go_lib_path/libx2go-server-db-sqlite3-wrapper createshadowsession $cookie $pid $client $gr_port $snd_port $fs_port $sid $shadreq_user`;
+		if ($err ne "ok")
+		{
+			die $err;
+		}
+	}
+	syslog('debug', "db_createshadowsession called, session ID: $sid, cookie: $cookie, client: $client, pid: $pid, graphics port: $gr_port, sound port: $snd_port, file sharing port: $fs_port, shadowing requesting user: $shadreq_user");
+}
+
 sub db_insertport
 {
 	my $server=shift or die "argument \"server\" missed";
diff --git a/X2Go/Server/DB/PostgreSQL.pm b/X2Go/Server/DB/PostgreSQL.pm
index 1bad04a..f101de8 100644
--- a/X2Go/Server/DB/PostgreSQL.pm
+++ b/X2Go/Server/DB/PostgreSQL.pm
@@ -43,7 +43,7 @@ setlogmask( LOG_UPTO(loglevel()) );
 use base 'Exporter';
 
 our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus',
-             'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount',
+             'db_getdisplays', 'db_insertsession', 'db_insertshadowsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount',
              'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot',
              'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts', 'db_listshadowsessions','db_listshadowsessions_all');
 
@@ -256,6 +256,20 @@ sub db_insertsession
 	$dbh->disconnect();
 }
 
+sub db_insertshadowsession
+{
+	init_db();
+	my $display=shift or die "argument \"display\" missed";
+	my $server=shift or die "argument \"server\" missed";
+	my $sid=shift or die "argument \"session_id\" missed";
+	my $shadreq_user=shift or die "argument \"shadreq_user\" missed";
+	my $dbh=DBI->connect("dbi:Pg:dbname=$db;host=$host;port=$port;sslmode=$sslmode", "$dbuser", "$dbpass",{AutoCommit => 1}) or die $_;
+	my $sth=$dbh->prepare("insert into sessions (display,server,uname,session_id) values ('$display','$server','$shadreq_user','$sid')");
+	$sth->execute()or die $_;
+	$sth->finish();
+	$dbh->disconnect();
+}
+
 sub db_createsession
 {
 	init_db();
diff --git a/X2Go/Server/DB/SQLite3.pm b/X2Go/Server/DB/SQLite3.pm
index 21741b8..9a0ce2a 100644
--- a/X2Go/Server/DB/SQLite3.pm
+++ b/X2Go/Server/DB/SQLite3.pm
@@ -52,7 +52,7 @@ my $realuser=$uname;
 use base 'Exporter';
 
 our @EXPORT=('db_listsessions','db_listsessions_all', 'db_getservers', 'db_getagent', 'db_resume', 'db_changestatus', 'db_getstatus',
-             'db_getdisplays', 'db_insertsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_insertmount',
+             'db_getdisplays', 'db_insertsession', 'db_insertshadowsession', 'db_getports', 'db_insertport', 'db_rmport', 'db_createsession', 'db_createshadowsession', 'db_insertmount',
              'db_getmounts', 'db_deletemount', 'db_getdisplay', 'dbsys_getmounts', 'dbsys_listsessionsroot',
              'dbsys_listsessionsroot_all', 'dbsys_rmsessionsroot', 'dbsys_deletemounts', 'db_listshadowsessions','db_listshadowsessions_all', );
 
@@ -219,6 +219,24 @@ sub db_insertsession
 	return 1;
 }
 
+sub db_insertshadowsession
+{
+	my $dbh = init_db();
+	my $display=shift or die "argument \"display\" missed";
+	my $server=shift or die "argument \"server\" missed";
+	my $sid=shift or die "argument \"session_id\" missed";
+	my $shadreq_user = shift or die "argument \"shadreq_user\" missed";
+	my $fake_sid = $sid;
+	$fake_sid =~ s/$shadreq_user-/$realuser-/;
+	check_user($fake_sid);
+	my $sth=$dbh->prepare("insert into sessions (display,server,uname,session_id, init_time, last_time) values
+	                       (?, ?, ?, ?, datetime('now','localtime'), datetime('now','localtime'))");
+	$sth->execute($display, $server, $shadreq_user, $sid) or die $_;
+	$sth->finish();
+	$dbh->disconnect();
+	return 1;
+}
+
 sub db_createsession
 {
 	my $dbh = init_db();
@@ -243,6 +261,33 @@ sub db_createsession
 	return 1;
 }
 
+sub db_createshadowsession
+{
+	my $dbh = init_db();
+	my $cookie=shift or die"argument \"cookie\" missed";
+	my $pid=shift or die"argument \"pid\" missed";
+	my $client=shift or die"argument \"client\" missed";
+	my $gr_port=shift or die"argument \"gr_port\" missed";
+	my $snd_port=shift or die"argument \"snd_port\" missed";
+	my $fs_port=shift or die"argument \"fs_port\" missed";
+	my $sid=shift or die "argument \"session_id\" missed";
+	my $shadreq_user = shift or die "argument \"shadreq_user\" missed";
+	my $fake_sid = $sid;
+	$fake_sid =~ s/^$shadreq_user-/$realuser-/;
+	check_user($fake_sid);
+	my $sth=$dbh->prepare("update sessions set status='R',last_time=datetime('now','localtime'),cookie=?,agent_pid=?,
+	                       client=?,gr_port=?,sound_port=?,fs_port=? where session_id=? and uname=?");
+	$sth->execute($cookie, $pid, $client, $gr_port, $snd_port, $fs_port, $sid, $shadreq_user);
+	if ($sth->err())
+	{
+		syslog('error', "createshadowsession (SQLite3 session db backend) failed with exitcode: $sth->err()");
+		die();
+	}
+	$sth->finish();
+	$dbh->disconnect();
+	return 1;
+}
+
 sub db_insertport
 {
 	my $dbh = init_db();
diff --git a/debian/changelog b/debian/changelog
index 989bb45..9cc828d 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -26,6 +26,10 @@ x2goserver (4.1.0.0-0~x2go1) UNRELEASED; urgency=low
     - Fix build-arch target in x2goserver/Makefile. (Fixes: #121).
     - Load config files from a Perl package (X2Go::Config).
     - Disable SupeReNicer by default.
+    - Fix session handling for cross-user-account desktop sharing. Now session
+      names of desktop sharing session start with the username of the user who
+      is requesting the desktop sharing, rather than the username of the person
+      who shares his/her desktop.
   * /debian/control:
     + Package X2Go::Log in separate package: libx2go-log-perl.
     + Package X2Go::Server::DB in separate package: libx2go-server-db-perl.
diff --git a/x2goserver/bin/x2gostartagent b/x2goserver/bin/x2gostartagent
index bc399c2..7b94862 100755
--- a/x2goserver/bin/x2gostartagent
+++ b/x2goserver/bin/x2gostartagent
@@ -89,6 +89,7 @@ if [ "$X2GO_STYPE" == "S" ]; then
 		$X2GO_LIB_PATH/x2gosyslog "$0" "notice" "user ,,$USER'' requests desktop sharing from user ,,$SHADOW_USER'' for desktop ,,$SHADOW_DESKTOP''"
 		$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "executing command: x2godesktopsharing client $X2GO_CLIENT $X2GO_GEOMETRY $X2GO_LINK $X2GO_PACK $X2GO_TYPE $X2GO_KBD_LAYOUT $X2GO_KBD_TYPE $X2GO_SET_KBD $X2GO_STYPE $X2GO_CMD $USER"
 		OUTPUT=`x2godesktopsharing client "$X2GO_CLIENT" "$X2GO_GEOMETRY" "$X2GO_LINK" "$X2GO_PACK" "$X2GO_TYPE" "$X2GO_KBD_LAYOUT" "$X2GO_KBD_TYPE" "$X2GO_SET_KBD" "$X2GO_STYPE" "$X2GO_CMD" "$USER"`
+		OUTPUT=`echo $OUTPUT | sed -e 's/#012/ /g'`
 		$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "command result is: $OUTPUT"
 		if [ "$OUTPUT" == "DENY" ]; then
 			echo "ACCESS DENIED" 1>&2
@@ -165,12 +166,22 @@ while [ "$OUTPUT"  != "inserted" ]; do
 		grep -q "|${NX_PORT}|" <<<$USED_PORTS ; then
 		OUTPUT="XXX"
 	else
-		SESSION_NAME="${USER}-${X2GO_PORT}-`date +\"%s\"`"
+		if [ -n "$SHADREQ_USER" ]; then
+			SESSION_NAME="${SHADREQ_USER}-${X2GO_PORT}-`date +\"%s\"`"
+		else
+			SESSION_NAME="${USER}-${X2GO_PORT}-`date +\"%s\"`"
+		fi
 		if [ "$COLORDEPTH" != "" ]; then
 			SESSION_NAME="${SESSION_NAME}_st${SESSION_TYPE}${X2GO_CMD}_dp${COLORDEPTH}"
 			SESSION_NAME=`echo "$SESSION_NAME" | sed  -e  "s/:/PP/g"`
 		fi
-		OUTPUT=`$X2GO_LIB_PATH/x2goinsertsession "$X2GO_PORT" "$HOSTNAME" "$SESSION_NAME"`
+		if [ -n "$SHADREQ_USER" ]; then
+			$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "initializing new shadow session with ID $SESSION_NAME"
+			OUTPUT=`$X2GO_LIB_PATH/x2goinsertshadowsession "$X2GO_PORT" "$HOSTNAME" "$SESSION_NAME" "$SHADREQ_USER"`
+		else
+			$X2GO_LIB_PATH/x2gosyslog "$0" "debug" "initializing new session with ID $SESSION_NAME"
+			OUTPUT=`$X2GO_LIB_PATH/x2goinsertsession "$X2GO_PORT" "$HOSTNAME" "$SESSION_NAME"`
+		fi
 	fi 
 done
 
@@ -317,7 +328,11 @@ test $X2GO_AGENT_RETVAL && {
 
 X2GO_SND_PORT=1024
 
-$X2GO_LIB_PATH/x2gocreatesession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" > /dev/null
+if [ -n "$SHADREQ_USER" ]; then
+	$X2GO_LIB_PATH/x2gocreateshadowsession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" "$SHADREQ_USER" > /dev/null
+else
+	$X2GO_LIB_PATH/x2gocreatesession "$X2GO_COOKIE" "$X2GO_AGENT_PID" "$X2GO_CLIENT" "$GR_PORT" "$SOUND_PORT" "$FS_PORT" "$SESSION_NAME" > /dev/null#
+fi
 
 if [ "$X2GO_SET_KBD" == "0" ] || [ "$X2GO_KBD_TYPE" != "auto" ]; then
 	$X2GO_LIB_PATH/x2gosyslog "$0" "info" "blocking creation of agent's keyboard file ${SESSION_DIR}/keyboard as requested by session startup command"
diff --git a/x2goserver/lib/x2gocreatesession b/x2goserver/lib/x2gocreateshadowsession
similarity index 87%
copy from x2goserver/lib/x2gocreatesession
copy to x2goserver/lib/x2gocreateshadowsession
index 27d3d2d..7149b81 100755
--- a/x2goserver/lib/x2gocreatesession
+++ b/x2goserver/lib/x2gocreateshadowsession
@@ -23,7 +23,7 @@
 use strict;
 use Sys::Syslog qw( :standard :macros );
 
-use X2Go::Server::DB qw(db_createsession);
+use X2Go::Server::DB qw(db_createshadowsession);
 use X2Go::Log qw(loglevel);
 
 openlog($0,'cons,pid','user');
@@ -37,8 +37,9 @@ my $gr_port=shift or die;
 my $snd_port=shift or die;
 my $fs_port=shift or die;
 my $sid=shift or die;
+my $shadreq_user=shift or die;
 
-db_createsession($cookie,$pid,$client,$gr_port, $snd_port, $fs_port, $sid);
+db_createshadowsession($cookie,$pid,$client,$gr_port, $snd_port, $fs_port, $sid, $shadreq_user);
 
 # closing syslog 
 closelog;
\ No newline at end of file
diff --git a/x2goserver/lib/x2goinsertsession b/x2goserver/lib/x2goinsertshadowsession
similarity index 88%
copy from x2goserver/lib/x2goinsertsession
copy to x2goserver/lib/x2goinsertshadowsession
index 94deece..44cc336 100755
--- a/x2goserver/lib/x2goinsertsession
+++ b/x2goserver/lib/x2goinsertshadowsession
@@ -23,7 +23,7 @@
 use strict;
 use Sys::Syslog qw( :standard :macros );
 
-use X2Go::Server::DB qw(db_insertsession);
+use X2Go::Server::DB qw(db_insertshadowsession);
 use X2Go::Log qw(loglevel);
 
 openlog($0,'cons,pid','user');
@@ -33,8 +33,9 @@ setlogmask( LOG_UPTO(loglevel()) );
 my $display=shift or die;
 my $server=shift or die;
 my $sid=shift or die;
+my $shadreq_user=shift or die;
 
-db_insertsession($display, $server, $sid);
+db_insertshadowsession($display, $server, $sid, $shadreq_user);
 print "inserted";
 
 # closing syslog 


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