[X2Go-Commits] x2gobroker.git - master-inai (branch) updated: e1c3ba9271e5c7cb8223c698b14f90469906c157
X2Go dev team
git-admin at x2go.org
Tue Apr 23 21:08:13 CEST 2013
The branch, master-inai has been updated
via e1c3ba9271e5c7cb8223c698b14f90469906c157 (commit)
from 2ce2d27c90a930f4c61690a07726c718d52def5e (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:
cgi/x2gobroker-simple.cgi | 55 +--
debian/changelog | 1 +
lib/x2gobroker-command.pl | 99 +++--
lib/x2gobroker-simple.pm | 979 +++++++++++++++++++++++----------------------
4 files changed, 571 insertions(+), 563 deletions(-)
The diff of changes is:
diff --git a/cgi/x2gobroker-simple.cgi b/cgi/x2gobroker-simple.cgi
index 8f6fe88..8ac7213 100755
--- a/cgi/x2gobroker-simple.cgi
+++ b/cgi/x2gobroker-simple.cgi
@@ -31,13 +31,17 @@ my $cgi = new CGI;
my @formValues = $cgi->param();
-print $cgi->header(-type =>'text/html',
- -expires =>'+1h'),
- $cgi->start_html( -title =>'X2Go Broker',
- -author =>'X2Go Developers <x2go-dev at lists.berlios.de>',
- -base =>'true',
- -meta =>{'keywords' =>'X2Go',
- 'description'=>'X2Go Broker'});
+print $cgi->header(
+ -type =>'text/html',
+ -expires =>'+1h'
+ ),
+ $cgi->start_html(
+ -title =>'X2Go Broker',
+ -author =>'X2Go Developers <x2go-dev at lists.berlios.de>',
+ -base =>'true',
+ -meta =>{'keywords' =>'X2Go', 'description'=>'X2Go Broker'}
+ );
+
#open (FL, ">>/tmp/x2gobroker.log");
#print FL `date`;
#print FL "called method ".$cgi->param('task')." from ".$ENV{REMOTE_ADDR}."\n";
@@ -45,19 +49,19 @@ print $cgi->header(-type =>'text/html',
if($cgi->param('task') eq 'testcon')
{
- for ( my $i=0;$i<2*1024*1024;$i++ )
- {
- print int(rand(9));
- }
- print $cgi->end_html();
+ for ( my $i=0;$i<2*1024*1024;$i++ )
+ {
+ print int(rand(9));
+ }
+ print $cgi->end_html();
}
-if (!checkAccess($cgi->param('user'), $cgi->param('password'), $cgi->param('authid')) == 1)
+if ( ! checkAccess($cgi->param('user'), $cgi->param('password'), $cgi->param('authid')) == 1 )
{
- printNoAccess();
- print $cgi->end_html();
- exit (0);
+ printNoAccess();
+ print $cgi->end_html();
+ exit (0);
}
print $cgi->start_form(),
@@ -65,28 +69,27 @@ $cgi->strong('Access granted');
if ($cgi->param('task') eq 'listsessions')
{
- listSessions($cgi->param('user'));
+ listSessions($cgi->param('user'));
}
if ($cgi->param('task') eq 'selectsession')
{
- selectSession($cgi->param('user'), $cgi->param('sid'));
+ selectSession($cgi->param('user'), $cgi->param('sid'));
}
if ($cgi->param('task') eq 'setpass')
{
- setPass($cgi->param('user'), $cgi->param('newpass'));
+ setPass($cgi->param('user'), $cgi->param('newpass'));
}
- $cgi->hr(),
- $cgi->end_form();
+$cgi->hr(),
+$cgi->end_form();
print $cgi->end_html();
-
sub printNoAccess
{
- print $cgi->start_form(),
- $cgi->hr(),
- $cgi->strong('Access denied'),
- $cgi->end_form();
+ print $cgi->start_form(),
+ $cgi->hr(),
+ $cgi->strong('Access denied'),
+ $cgi->end_form();
}
diff --git a/debian/changelog b/debian/changelog
index 22bd8c2..832aa39 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -4,5 +4,6 @@ x2gobroker (0.0.0.1-0~x2go1) UNRELEASED; urgency=low
* Setting up new public X2Go project: x2gohttpbroker.
* /debian/control:
+ Add an initial dependency selection to the various Depends fields.
+ * Fix code indentations (spaces replaced by tabs, use proper indentation levels).
-- Mike Gabriel <mike.gabriel at das-netzwerkteam.de> Wed, 15 Sep 2012 17:30:24 +0200
diff --git a/lib/x2gobroker-command.pl b/lib/x2gobroker-command.pl
index e39094d..0bac8de 100755
--- a/lib/x2gobroker-command.pl
+++ b/lib/x2gobroker-command.pl
@@ -24,45 +24,44 @@ use strict;
sub initUser
{
- my ($user, $uid, $gid, $home)=@_;
- if (! -d "$home")
- {
- mkdir ("$home", 0700);
- chown ($uid, $gid, $home);
- }
- if (! -e "$home/.x2go/sqlpass")
- {
- open my $save_out, ">&STDOUT";
- close (STDOUT);
- system "/usr/lib/x2go/script/x2godbadmin", "--adduser", $user;
- open STDOUT, ">&", $save_out;
- }
+ my ($user, $uid, $gid, $home)=@_;
+ if (! -d "$home")
+ {
+ mkdir ("$home", 0700);
+ chown ($uid, $gid, $home);
+ }
+ if (! -e "$home/.x2go/sqlpass")
+ {
+ open my $save_out, ">&STDOUT";
+ close (STDOUT);
+ system "/usr/lib/x2go/script/x2godbadmin", "--adduser", $user;
+ open STDOUT, ">&", $save_out;
+ }
}
sub createKey
{
- my ($uid, $gid, $home)=@_;
- if (! -d "$home/.ssh")
- {
- mkdir ("$home/.ssh", 0700);
- chown ($uid, $gid, "$home/.ssh");
- }
- if( -e "$home/.ssh/authorized_keys")
- {
- unlink("$home/.ssh/authorized_keys");
- }
- open my $save_out, ">&STDOUT";
- close (STDOUT);
- system "/usr/bin/ssh-keygen", "-t", "dsa", "-N","","-f","$home/.ssh/authorized_keys";
- open STDOUT, ">&", $save_out;
- open (F,"<$home/.ssh/authorized_keys");
- print <F>;
- close (F);
- unlink("$home/.ssh/authorized_keys");
- rename("$home/.ssh/authorized_keys.pub", "$home/.ssh/authorized_keys");
+ my ($uid, $gid, $home)=@_;
+ if (! -d "$home/.ssh")
+ {
+ mkdir ("$home/.ssh", 0700);
+ chown ($uid, $gid, "$home/.ssh");
+ }
+ if( -e "$home/.ssh/authorized_keys")
+ {
+ unlink("$home/.ssh/authorized_keys");
+ }
+ open my $save_out, ">&STDOUT";
+ close (STDOUT);
+ system "/usr/bin/ssh-keygen", "-t", "dsa", "-N","","-f","$home/.ssh/authorized_keys";
+ open STDOUT, ">&", $save_out;
+ open (F,"<$home/.ssh/authorized_keys");
+ print <F>;
+ close (F);
+ unlink("$home/.ssh/authorized_keys");
+ rename("$home/.ssh/authorized_keys.pub", "$home/.ssh/authorized_keys");
}
-
$< = $>;
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)};
$ENV{'PATH'} = '/bin:/usr/bin';
@@ -70,48 +69,46 @@ $ENV{'PATH'} = '/bin:/usr/bin';
my $username=shift or die;
my $mode=shift or die;
-
-my ($name,$passwd,$uid,$gid,
- $quota,$comment,$gcos,$home,$shell,$expire) = getpwnam($username);
+my ($name,$passwd,$uid,$gid, $quota,$comment,$gcos,$home,$shell,$expire) = getpwnam($username);
if($uid < 1000)
{
- die 'operation on system user';
+ die 'operation on system user';
}
if($mode eq 'listsessions')
{
- initUser($name, $uid, $gid, $home);
- print "OK\n";
- system "/bin/su", $name, "-c", "/usr/bin/x2golistsessions --all-servers";
+ initUser($name, $uid, $gid, $home);
+ print "OK\n";
+ system "/bin/su", $name, "-c", "/usr/bin/x2golistsessions --all-servers";
}
if($mode eq 'getservers')
{
- initUser($name, $uid, $gid, $home);
- print "OK\n";
- system "/bin/su", $name, "-c", "/usr/bin/x2gogetservers";
+ initUser($name, $uid, $gid, $home);
+ print "OK\n";
+ system "/bin/su", $name, "-c", "/usr/bin/x2gogetservers";
}
if($mode eq 'key')
{
- initUser($name, $uid, $gid, $home);
- print "OK\n";
- createKey($uid, $gid, $home);
+ initUser($name, $uid, $gid, $home);
+ print "OK\n";
+ createKey($uid, $gid, $home);
}
if($mode eq 'suspend')
{
- initUser($name, $uid, $gid, $home);
- print "OK\n";
- my $sid=shift;
- system "/bin/su", $name, "-c", "/usr/bin/x2gosuspend-session $sid";
+ initUser($name, $uid, $gid, $home);
+ print "OK\n";
+ my $sid=shift;
+ system "/bin/su", $name, "-c", "/usr/bin/x2gosuspend-session $sid";
}
if($mode eq 'ping')
{
- print "OK\n";
+ print "OK\n";
}
diff --git a/lib/x2gobroker-simple.pm b/lib/x2gobroker-simple.pm
index f27eb47..5e56c28 100644
--- a/lib/x2gobroker-simple.pm
+++ b/lib/x2gobroker-simple.pm
@@ -39,588 +39,595 @@ use base 'Exporter';
our @EXPORT = ('checkAccess', 'listSessions', 'selectSession', 'setPass');
sub getBase
+###
+### FIXME: provide that in /etc/x2go/x2gobroker-simple.cfg
+### FIXME: put the pid of this process in the lock files
{
- my $login=shift;
- $login=~s/cn=ldapadmin//;
- return $login;
+ my $login=shift;
+ $login=~s/cn=ldapadmin,//;
+ return $login;
}
sub initLdap
+###
+### FIXME: lock files have to be in /run or /var/run...
+###
{
- my $masterlocked=0;
- my $replicalocked=0;
- if((-e "/etc/x2go/x2gobroker/masterldap.lock") &&(-e "/etc/x2go/x2gobroker/replicaldap.lock"))
- {
- die "Can't connect to LDAP server";
- }
- if(-e "/etc/x2go/x2gobroker/replicaldap.lock")
- {
- $masterlocked=1;
- my ($ldap,$error)=initLDAPServer( $ldapuri );
- if(!$ldap)
- {
- `touch /etc/x2go/x2gobroker/masterldap.lock`;
- die "Can't connect to LDAP server";
- }
- return $ldap;
- }
- if(-e "/etc/x2go/x2gobroker/masterldap.lock")
- {
- $replicalocked=1;
- my ($ldap,$error)=initLDAPServer( $replica );
- if(!$ldap)
- {
- `touch /etc/x2go/x2gobroker/replicaldap.lock`;
- die "Can't connect to LDAP server";
- }
- return $ldap;
- }
- if(!int(rand(2)))
- {
- my ($ldap,$error)=initLDAPServer( $ldapuri );
- if(!$ldap)
- {
- `touch /etc/x2go/x2gobroker/masterldap.lock`;
- return initLdap();
- }
- return $ldap;
- }
- else
- {
- my ($ldap,$error)=initLDAPServer( $replica );
- if(!$ldap)
- {
- `touch /etc/x2go/x2gobroker/replicaldap.lock`;
- return initLdap();
- }
- return $ldap;
- }
+ my $masterlocked=0;
+ my $replicalocked=0;
+ if ( ( -e "/etc/x2go/x2gobroker/masterldap.lock") && ( -e "/etc/x2go/x2gobroker/replicaldap.lock" ) )
+ {
+ die "Can't connect to LDAP server";
+ }
+ if ( -e "/etc/x2go/x2gobroker/replicaldap.lock" )
+ {
+ $masterlocked=1;
+ my ($ldap,$error)=initLDAPServer( $ldapuri );
+ if( ! $ldap )
+ {
+ `touch /etc/x2go/x2gobroker/masterldap.lock`;
+ die "Can't connect to LDAP server";
+ }
+ return $ldap;
+ }
+ if( -e "/etc/x2go/x2gobroker/masterldap.lock" )
+ {
+ $replicalocked=1;
+ my ($ldap,$error)=initLDAPServer( $replica );
+ if ( ! $ldap )
+ {
+ `touch /etc/x2go/x2gobroker/replicaldap.lock`;
+ die "Can't connect to LDAP server";
+ }
+ return $ldap;
+ }
+ if( ! int(rand(2)) )
+ {
+ my ($ldap,$error)=initLDAPServer( $ldapuri );
+ if( ! $ldap )
+ {
+ `touch /etc/x2go/x2gobroker/masterldap.lock`;
+ return initLdap();
+ }
+ return $ldap;
+ } else {
+ my ($ldap,$error)=initLDAPServer( $replica );
+ if(!$ldap)
+ {
+ `touch /etc/x2go/x2gobroker/replicaldap.lock`;
+ return initLdap();
+ }
+ return $ldap;
+ }
}
sub initMasterLdap
{
- if(-e "/etc/x2go/x2gobroker/masterldap.lock")
- {
- die "Master LDAP server is down\n";
- }
- my ($ldap,$error)=initLDAPServer( $ldapuri );
- if(!$ldap)
- {
- `touch /etc/x2go/x2gobroker/masterldap.lock`;
- die $error;
- }
- return $ldap;
+ if(-e "/etc/x2go/x2gobroker/masterldap.lock")
+ {
+ die "Master LDAP server is down\n";
+ }
+ my ($ldap,$error)=initLDAPServer( $ldapuri );
+ if( ! $ldap )
+ {
+ `touch /etc/x2go/x2gobroker/masterldap.lock`;
+ die $error;
+ }
+ return $ldap;
}
sub initLDAPServer
{
- my $url=shift;
- my $ldap=Net::LDAP->new( $url );
- if(! $ldap)
- {
- notify("LDAP server $url is down ($@). Please, repair it and remove lock file in /etc/x2go/x2gobroker\n");
- return (0,"$@");
- }
- my $message = $ldap->bind($binddn,password=>$bindpw);
- if(!$message)
- {
- notify("LDAP server $url is down ($@). Please, repair it and remove lock file in /etc/x2go/x2gobroker\n");
- return (0,"$@");
- }
- return ($ldap,0);
+ my $url=shift;
+ my $ldap=Net::LDAP->new( $url );
+ if( ! $ldap )
+ {
+ notify("LDAP server $url is down ($@). Please, repair it and remove lock file in /etc/x2go/x2gobroker\n");
+ return (0,"$@");
+ }
+ my $message = $ldap->bind($binddn,password=>$bindpw);
+ if(!$message)
+ {
+ notify("LDAP server $url is down ($@). Please, repair it and remove lock file in /etc/x2go/x2gobroker\n");
+ return (0,"$@");
+ }
+ return ($ldap,0);
}
sub setPass
{
- my ($user, $newpass)=@_;
-#check if we have master ldap here
-
- my $attr;
-
- my $csh=Crypt::SaltedHash->new(algorithm => 'SHA-1');
- $csh->add($newpass);
- $newpass=$csh->generate;
-
- push(@$attr,'userPassword'=>$newpass);
- my $changes;
- push(@$changes,'replace'=>$attr);
-
- my $ldap = initMasterLdap();
-
-
- my $dn="cn=$user,ou=BrokerUsers".getBase($binddn);
- my $message=$ldap->modify($dn, changes => $changes);
-
- if($message->code)
- {
- die $message->error.": ".$message->error_desc;
- }
- print "\n<br>CHANGING PASS OK<br>\n";
+ my ($user, $newpass)=@_;
+ # check if we have master ldap here
+
+ my $attr;
+
+ my $csh=Crypt::SaltedHash->new(algorithm => 'SHA-1');
+ $csh->add($newpass);
+ $newpass=$csh->generate;
+
+ push(@$attr,'userPassword'=>$newpass);
+ my $changes;
+ push(@$changes,'replace'=>$attr);
+
+ my $ldap = initMasterLdap();
+
+ my $dn="cn=$user,ou=BrokerUsers".getBase($binddn);
+ my $message=$ldap->modify($dn, changes => $changes);
+
+ if($message->code)
+ {
+ die $message->error.": ".$message->error_desc;
+ }
+ print "\n<br>CHANGING PASS OK<br>\n";
}
sub selectSession
{
- my ($user, $sid)=@_;
- my @words=split("\@",$sid);
- my $sess_id=@words[1];
- my $host=@words[0];
- checkAndStartSession($user, $host, $sess_id);
+ my ($user, $sid)=@_;
+ my @words=split("\@",$sid);
+ my $sess_id=@words[1];
+ my $host=@words[0];
+ checkAndStartSession($user, $host, $sess_id);
}
sub getExtCon
{
- my $host=shift;
-
- my $ldap = initLdap();
-
- my $dn="cn=$host,ou=Servers,ou=ON".getBase($binddn);
- my $message=$ldap->search(base => $dn,
- scope => 'base', filter => '(objectClass=ipHost)');
-
- if($message->code)
- {
- die $message->error.": ".$message->error_desc;
- }
- foreach ($message->entries)
- {
- my $asn=$_->{'asn'};
- my $attr=$asn->{'attributes'};
- foreach (@$attr)
- {
- my $type=$_->{'type'};
- my $value=$_->{'vals'}[0];
- if($type eq 'description')
- {
- my @words=split(":",$value);
- return (@words[0], @words[1]);
- }
- }
- }
+ my $host=shift;
+
+ my $ldap = initLdap();
+
+ my $dn="cn=$host,ou=Servers,ou=ON".getBase($binddn);
+ ####
+ #### FIXME: get scope from config file in /etc/x2go/x2gobroker-*.conf
+ ####
+ my $message=$ldap->search(base => $dn,
+ scope => 'base',
+ filter => '(objectClass=ipHost)'
+ );
+
+ if($message->code)
+ {
+ die $message->error.": ".$message->error_desc;
+ }
+ foreach ($message->entries)
+ {
+ my $asn=$_->{'asn'};
+ my $attr=$asn->{'attributes'};
+ foreach (@$attr)
+ {
+ my $type=$_->{'type'};
+ my $value=$_->{'vals'}[0];
+ if( $type eq 'description' )
+ {
+ my @words=split(":",$value);
+ return (@words[0], @words[1]);
+ }
+ }
+ }
}
sub checkAndStartSession
{
- my ($uid,$host,$sid)=@_;
- my ($status,$sessions)=check_ts($host,$uid);
- if(!$status)
- {
- print "ERROR check TS\n";
- return;
- }
- my $running=0;
- if($sessions)
- {
- my @sinfo=split("\\|",$sessions);
- my $sess_stat=@sinfo[4];
- my $sess_srv=@sinfo[3];
- $sid=@sinfo[1];
- if($sess_stat eq 'R')
- {
- $running=1;
- my $str;
- ($status,$str)=remoteBroker($host,$uid,"suspend $sid");
- $sessions=~s/\|R\|/\|S\|/;
- }
- if($sess_stat eq 'S')
- {
- $running=1;
- }
- }
-
- my($ip,$port)=getExtCon($host);
- print "SERVER:$ip:$port\n";
- if($running)
- {
- print "SESSION_INFO:".(split("\n",$sessions))[0]."\n";
- }
+ my ($uid,$host,$sid)=@_;
+ my ($status,$sessions)=check_ts($host,$uid);
+ if(!$status)
+ {
+ print "ERROR check TS\n";
+ return;
+ }
+ my $running=0;
+ if( $sessions )
+ {
+ my @sinfo=split("\\|",$sessions);
+ my $sess_stat=@sinfo[4];
+ my $sess_srv=@sinfo[3];
+ $sid=@sinfo[1];
+ if( $sess_stat eq 'R' )
+ {
+ $running=1;
+ my $str;
+ ($status,$str)=remoteBroker($host,$uid,"suspend $sid");
+ $sessions=~s/\|R\|/\|S\|/;
+ }
+ if( $sess_stat eq 'S' )
+ {
+ $running=1;
+ }
+ }
+
+ my($ip,$port)=getExtCon($host);
+ print "SERVER:$ip:$port\n";
+ if($running)
+ {
+ print "SESSION_INFO:".(split("\n",$sessions))[0]."\n";
+ }
}
sub checkRunningSession
{
- my ($sess_srv, $sess_stat, $server_dn, $uid, $sid, $ldap)=@_;
- my @dn_el=split(',',$server_dn);
- shift(@dn_el);
- shift(@dn_el);
- my $node_dn="cn=".$sess_srv.",ou=Hosts,".join(',', at dn_el);
- my $mesg=$ldap->search(base => $node_dn,
- scope => 'base', filter => '(objectClass=X2GoServerNode)');
- if(!$mesg->code)
- {
- my @entries=$mesg->entries();
- if(@entries[0]->get_value('serverStatus') eq 'TRUE')
- {
- my $node_ref={};
- $node_ref->{'ip'}=@entries[0]->get_value('ipHostNumber');
- $node_ref->{'dn'}=$node_dn;
- my $status;
- my $str;
- if($sess_stat eq 'R')
+ my ($sess_srv, $sess_stat, $server_dn, $uid, $sid, $ldap)=@_;
+ my @dn_el=split(',',$server_dn);
+ shift(@dn_el);
+ shift(@dn_el);
+ my $node_dn="cn=".$sess_srv.",ou=Hosts,".join(',', at dn_el);
+ ####
+ #### FIXME: get scope from config file in /etc/x2go/x2gobroker-*.conf
+ ####
+ my $mesg=$ldap->search(base => $node_dn,
+ scope => 'base',
+ filter => '(objectClass=X2GoServerNode)'
+ );
+ if(!$mesg->code)
{
- print "session running, suspend session $sid\n";
- ($status,$str)=remoteBroker($node_ref->{'ip'},$uid,"suspend $sid",$node_ref->{'dn'}, $ldap);
+ my @entries=$mesg->entries();
+ if(@entries[0]->get_value('serverStatus') eq 'TRUE')
+ {
+ my $node_ref={};
+ $node_ref->{'ip'}=@entries[0]->get_value('ipHostNumber');
+ $node_ref->{'dn'}=$node_dn;
+ my $status;
+ my $str;
+ if( $sess_stat eq 'R' )
+ {
+ print "session running, suspend session $sid\n";
+ ($status,$str)=remoteBroker($node_ref->{'ip'},$uid,"suspend $sid",$node_ref->{'dn'}, $ldap);
+ } else {
+ print "session not running, ping node\n";
+ ($status,$str)=remoteBroker($node_ref->{'ip'},$uid,'ping',$node_ref->{'dn'}, $ldap);
+ }
+ if($status)
+ {
+ return $node_ref;
+ }
+ print "error executing remote broker \n";
+ }
+ print "node is down \n";
+ return 0;
}
- else
- {
- print "session not running, ping node\n";
- ($status,$str)=remoteBroker($node_ref->{'ip'},$uid,'ping',$node_ref->{'dn'}, $ldap);
- }
- if($status)
- {
- return $node_ref;
- }
- print "error executing remote broker \n";
- }
- print "node is down \n";
- return 0;
- }
- print "error searching $node_dn: ".$mesg->error."\n";
- return 0;
+ print "error searching $node_dn: ".$mesg->error."\n";
+ return 0;
}
sub startNewSession
{
- my ($dn, $ldap, $uid)=@_;
- my $mesg=$ldap->search(base => $dn,
- scope => 'base', filter => '(objectClass=X2GoServer)');
-
- if($mesg->code)
- {
- return 0;
- }
-
- my @entries=$mesg->entries();
- my $ref = @entries[0]->get_value ( 'serverNode', asref => 1 );
- my $nodes;
- foreach(@$ref)
- {
- my $server=$_;
- my @sdn=split(",",$dn);
- shift(@sdn);
- shift(@sdn);
- my $server_dn="cn=$server,ou=Hosts,".join(",", at sdn);
-
- my $mesg=$ldap->search(base => $server_dn,
- scope => 'base', filter => '(objectClass=X2GoServerNode)');
- if(!$mesg->code)
- {
- my @entries=$mesg->entries();
- if(@entries[0]->get_value('serverStatus') eq 'TRUE')
- {
- my $node_ref={};
- $node_ref->{'ip'}=@entries[0]->get_value('ipHostNumber');
- $node_ref->{'sessions'}=0;
- $node_ref->{'dn'}=$server_dn;
- $nodes->{$server}=$node_ref;
- }
- }
- }
- return findBestServer($nodes,$ldap, $uid);
+ my ($dn, $ldap, $uid)=@_;
+ ####
+ #### FIXME: get scope from config file in /etc/x2go/x2gobroker-*.conf
+ ####
+ my $mesg=$ldap->search(base => $dn,
+ scope => 'base',
+ filter => '(objectClass=X2GoServer)'
+ );
+
+ if($mesg->code)
+ {
+ return 0;
+ }
+
+ my @entries=$mesg->entries();
+ my $ref = @entries[0]->get_value ( 'serverNode', asref => 1 );
+ my $nodes;
+ foreach(@$ref)
+ {
+ my $server=$_;
+ my @sdn=split(",",$dn);
+ shift(@sdn);
+ shift(@sdn);
+ my $server_dn="cn=$server,ou=Hosts,".join(",", at sdn);
+
+ my $mesg=$ldap->search(base => $server_dn,
+ scope => 'base',
+ filter => '(objectClass=X2GoServerNode)'
+ );
+ if( ! $mesg->code )
+ {
+ my @entries=$mesg->entries();
+ if(@entries[0]->get_value('serverStatus') eq 'TRUE')
+ {
+ my $node_ref={};
+ $node_ref->{'ip'}=@entries[0]->get_value('ipHostNumber');
+ $node_ref->{'sessions'}=0;
+ $node_ref->{'dn'}=$server_dn;
+ $nodes->{$server}=$node_ref;
+ }
+ }
+ }
+ return findBestServer($nodes,$ldap, $uid);
}
sub findBestServer
{
- my ($nodes, $ldap, $user)=@_;
- my $servers;
- my $status;
- while( my ($key,$value) = each(%$nodes))
- {
- if(!$status)
- {
- my $ip=$value->{'ip'};
- my $dn=$value->{'dn'};
- ($status,$servers)=remoteBroker($ip,$user,'getservers',$dn, $ldap);
- if(!$status)
+ my ($nodes, $ldap, $user)=@_;
+ my $servers;
+ my $status;
+ while( my ($key,$value) = each(%$nodes))
+ {
+ if( ! $status )
+ {
+ my $ip=$value->{'ip'};
+ my $dn=$value->{'dn'};
+ ($status,$servers)=remoteBroker($ip,$user,'getservers',$dn, $ldap);
+ if(!$status)
+ {
+ delete $nodes->{$key};
+ }
+ }
+ }
+ if( ! $status )
+ {
+ return 0;
+ }
+ my @srvlines=split("\n",$servers);
+ foreach(@srvlines)
{
- delete $nodes->{$key};
+ my @words=split(' ',$_);
+ my $ref=$nodes->{@words[0]};
+ if( $ref )
+ {
+ $ref->{'sessions'}=1*@words[1];
+ }
}
- }
- }
- if(!$status)
- {
- return 0;
- }
- my @srvlines=split("\n",$servers);
- foreach(@srvlines)
- {
- my @words=split(' ',$_);
- my $ref=$nodes->{@words[0]};
- if($ref)
- {
- $ref->{'sessions'}=1*@words[1];
- }
- }
- return checkServers($nodes, $ldap, $user);
+ return checkServers($nodes, $ldap, $user);
}
sub checkServers
-{
- my ($nodes, $ldap, $user)=@_;
- my $bestnode=0;
- my $bestnodekey;
- my $key;
- my $value;
- while( ($key,$value) = each(%$nodes))
- {
- if(! $bestnode)
- {
- $bestnode=$value;
- $bestnodekey=$key;
- }
- else
- {
- if($value->{'sessions'}<$bestnode->{'sessions'})
+{
+ my ($nodes, $ldap, $user)=@_;
+ my $bestnode=0;
+ my $bestnodekey;
+ my $key;
+ my $value;
+ while( ($key,$value) = each(%$nodes))
+ {
+ if(! $bestnode)
+ {
+ $bestnode=$value;
+ $bestnodekey=$key;
+ } else {
+ if($value->{'sessions'}<$bestnode->{'sessions'})
+ {
+ $bestnode=$value;
+ $bestnodekey=$key;
+ }
+ }
+ }
+ if( ! $bestnode )
{
- $bestnode=$value;
- $bestnodekey=$key;
+ print "bestnode is null: \n";
+ return 0;
+ } else {
+ my $ip=$bestnode->{'ip'};
+ my $dn=$bestnode->{'dn'};
+ my ($status,$fakearr)=remoteBroker($ip,$user,'ping',$dn, $ldap);
+ if( ! $status )
+ {
+ delete $nodes->{$bestnodekey};
+ return checkServers($nodes, $ldap, $user);
+ } else {
+ return $bestnode;
+ }
}
- }
- }
- if(!$bestnode)
- {
- print "bestnode is null: \n";
- return 0;
- }
- else
- {
- my $ip=$bestnode->{'ip'};
- my $dn=$bestnode->{'dn'};
- my ($status,$fakearr)=remoteBroker($ip,$user,'ping',$dn, $ldap);
- if(!$status)
- {
- delete $nodes->{$bestnodekey};
- return checkServers($nodes, $ldap, $user);
- }
- else
- {
- return $bestnode;
- }
- }
}
sub check_ts
{
- my ($host, $user)=@_;
- my $server_dn;
- my $ldap;
- my($status,$sessions)=getSessionRunning($server_dn,
- $host,
- $user, $ldap);
- if($status)
- {
- return (1,$sessions);
- }
- return (0,0);
+ my ($host, $user)=@_;
+ my $server_dn;
+ my $ldap;
+ my($status,$sessions)=getSessionRunning($server_dn, $host, $user, $ldap);
+ if( $status )
+ {
+ return (1,$sessions);
+ }
+ return (0,0);
}
sub getSessionRunning
{
- my ($dn,$ip,$user, $ldap)=@_;
- my ($status,$sessions)=remoteBroker($ip,$user,'listsessions', $dn, $ldap);
- if(!$status)
- {
- return (0,0);
- }
- else
- {
- return (1,$sessions);
- }
+ my ($dn,$ip,$user, $ldap)=@_;
+ my ($status,$sessions)=remoteBroker($ip,$user,'listsessions', $dn, $ldap);
+ if( ! $status )
+ {
+ return (0,0);
+ } else {
+ return (1,$sessions);
+ }
}
sub remoteBroker
{
- my ($ip, $user, $cmd, $dn, $ldap)=@_;
- my $res=`ssh -o ConnectTimeout=15 -o UserKnownHostsFile=/etc/x2go/x2gobroker/ts_known_hosts x2gobroker\@$ip -i /etc/x2go/x2gobroker/id_x2gobroker_dsa \"/usr/lib/x2go/broker/x2gobroker-command $user $cmd 2>/dev/null\"`;
- my @rarr=split("\n",$res);
- my $stat;
- if(@rarr[0] eq 'OK')
- {
- $stat=1;
- }
- else
- {
- $stat=0;
-# setNodeDown($dn, $ldap, $cmd, $user);
- }
- shift(@rarr);
- return($stat,join("\n", at rarr));
+ my ($ip, $user, $cmd, $dn, $ldap)=@_;
+ my $res=`ssh -o ConnectTimeout=15 -o UserKnownHostsFile=/etc/x2go/x2gobroker/ts_known_hosts x2gobroker\@$ip -i /etc/x2go/x2gobroker/id_x2gobroker_dsa \"/usr/lib/x2go/broker/x2gobroker-command $user $cmd 2>/dev/null\"`;
+ my @rarr=split("\n",$res);
+ my $stat;
+ if(@rarr[0] eq 'OK')
+ {
+ $stat=1;
+ } else {
+ $stat=0;
+ # setNodeDown($dn, $ldap, $cmd, $user);
+ }
+ shift(@rarr);
+ return($stat,join("\n", at rarr));
}
sub notify
{
- my $message=shift;
- open (F,">>/tmp/x2gobroker.log");
- print F `date`.$message."\n";
- close(F);
+ my $message=shift;
+ open (F,">>/tmp/x2gobroker.log");
+ print F `date`.$message."\n";
+ close(F);
}
sub setNodeDown
{
- my($dn, $ldap, $cmd, $user)=@_;
- my $attr;
- push(@$attr,'serverStatus' => 'FALSE');
- my $changes;
- push (@$changes, 'replace' => $attr);
- $ldap->modify($dn,changes => $changes);
- notify ("set status of $dn to \"down\", failed command: \"$cmd\", user: \"$user\"\n");
+ my($dn, $ldap, $cmd, $user)=@_;
+ my $attr;
+ push(@$attr,'serverStatus' => 'FALSE');
+ my $changes;
+ push (@$changes, 'replace' => $attr);
+ $ldap->modify($dn,changes => $changes);
+ notify ("set status of $dn to \"down\", failed command: \"$cmd\", user: \"$user\"\n");
}
sub setServerDown
{
- my($dn, $ldap)=@_;
- my $attr;
- push(@$attr,'serverStatus' => 'FALSE');
- my $changes;
- push (@$changes, 'replace' => $attr);
- $ldap->modify($dn,changes => $changes);
- notify ("set status of $dn to \"down\", all nodes are down\n");
+ my($dn, $ldap)=@_;
+ my $attr;
+ push(@$attr,'serverStatus' => 'FALSE');
+ my $changes;
+ push (@$changes, 'replace' => $attr);
+ $ldap->modify($dn,changes => $changes);
+ notify ("set status of $dn to \"down\", all nodes are down\n");
}
sub checkAccess
{
- my ($user,$pass)=@_;
-
- my $ldap = initLdap();
-
-
- my $dn="uid=$user,ou=People".getBase($binddn);
- my $mesg=$ldap->search(base => $dn,
- scope => 'base', filter => '(objectClass=posixAccount)');
-
- if($mesg->code)
+ my ($user,$pass)=@_;
+
+ my $ldap = initLdap();
+
+ my $dn="uid=$user,ou=People".getBase($binddn);
+ my $mesg=$ldap->search(base => $dn,
+ scope => 'base',
+ filter => '(objectClass=posixAccount)'
+ );
+
+ if( $mesg->code )
{
- return 0;
+ return 0;
}
my @entries=$mesg->entries();
my $crypted=@entries[0]->get_value('userPassword');
$mesg = $ldap->unbind;
- if(Crypt::SaltedHash->validate($crypted, $pass))
+ if ( Crypt::SaltedHash->validate($crypted, $pass) )
{
- return 1;
+ return 1;
}
return 0;
}
sub listSessions
{
- my $user=shift;
-
- my $ldap = initLdap();
-
- my $dn="ou=Servers,ou=ON".getBase($binddn);
- my $message=$ldap->search(base => $dn,
- scope => 'sub', filter => '(objectClass=ipHost)');
-
- if($message->code)
- {
- die $message->error.": ".$message->error_desc;
- }
-# print Dumper($message->entries);
- print "START_USER_SESSIONS<br>";
- foreach ($message->entries)
- {
- my $asn=$_->{'asn'};
- my $attr=$asn->{'attributes'};
- my $host;
- my $int_ip;
- my $ext_ip;
- my $ext_port;
- foreach (@$attr)
- {
- my $type=$_->{'type'};
- my $value=$_->{'vals'}[0];
- if($type eq 'cn')
- {
- $host=$value;
- }
- }
- my($status,$sessions)=getSessionRunning($dn,$host,$user, $ldap);
- if($status)
- {
- my $sess_srv;
- if($sessions)
- {
- my @sinfo=split("\\|",$sessions);
- my $sess_stat=@sinfo[4];
- $sess_srv=@sinfo[3];
- my $sid=@sinfo[1];
- print "<br>[$host\@$sid]<br>";
- print "status=$sess_stat<br>";
- #get ip
- #get port
- }
- else
- {
- my $sessions;
- ($sess_srv,$ext_ip,$ext_port, $sessions)=getBestNode($dn, $ldap, $user, $host, $message);
- print "<br>[$host]<br>";
- }
- #print "host=$ext_ip<br>";
- print "user=$user<br>";
- #print "sshport=$ext_port<br>";
- print "name=Stadt Treuchtlingen<br>";
- goto loop_end;
- }
- }
-loop_end:
- print "END_USER_SESSIONS<br>";
- $ldap->unbind();
+ my $user=shift;
+
+ my $ldap = initLdap();
+
+ my $dn="ou=Servers,ou=ON".getBase($binddn);
+ my $message=$ldap->search(base => $dn,
+ scope => 'sub',
+ filter => '(objectClass=ipHost)'
+ );
+
+ if($message->code)
+ {
+ die $message->error.": ".$message->error_desc;
+ }
+ # print Dumper($message->entries);
+ print "START_USER_SESSIONS<br>";
+ foreach ($message->entries)
+ {
+ my $asn=$_->{'asn'};
+ my $attr=$asn->{'attributes'};
+ my $host;
+ my $int_ip;
+ my $ext_ip;
+ my $ext_port;
+ foreach (@$attr)
+ {
+ my $type=$_->{'type'};
+ my $value=$_->{'vals'}[0];
+ if( $type eq 'cn' )
+ {
+ $host=$value;
+ }
+ }
+ my($status,$sessions)=getSessionRunning($dn,$host,$user, $ldap);
+ if($status)
+ {
+ my $sess_srv;
+ if($sessions)
+ {
+ my @sinfo=split("\\|",$sessions);
+ my $sess_stat=@sinfo[4];
+ $sess_srv=@sinfo[3];
+ my $sid=@sinfo[1];
+ print "<br>[$host\@$sid]<br>";
+ print "status=$sess_stat<br>";
+ #get ip
+ #get port
+ } else {
+ my $sessions;
+ ($sess_srv,$ext_ip,$ext_port, $sessions)=getBestNode($dn, $ldap, $user, $host, $message);
+ print "<br>[$host]<br>";
+ }
+ #print "host=$ext_ip<br>";
+ print "user=$user<br>";
+ #print "sshport=$ext_port<br>";
+ print "name=Stadt Treuchtlingen<br>";
+ goto loop_end;
+ }
+ }
+ loop_end:
+ print "END_USER_SESSIONS<br>";
+ $ldap->unbind();
}
sub getBestNode
{
- my ($dn, $ldap, $user, $ip, $message)=@_;
- my $servers;
- my $status;
- ($status,$servers)=remoteBroker($ip,$user,'getservers',$dn, $ldap);
- my $srvref={};
- my @srvlines=split("\n",$servers);
- foreach(@srvlines)
- {
- my @words=split(' ',$_);
- $srvref->{@words[0]}=1*@words[1];
- }
- my $bestval=-1;
- my $bestsrv;
- my $bestext_ip;
- my $bestext_port;
- foreach ($message->entries)
- {
- my $asn=$_->{'asn'};
- my $attr=$asn->{'attributes'};
- my $host;
- my $ext_ip;
- my $ext_port;
- foreach (@$attr)
- {
- my $type=$_->{'type'};
- my $value=$_->{'vals'}[0];
- if($type eq 'cn')
- {
- $host=$value;
- }
- if($type eq 'description')
- {
- my @words=split(":",$value);
- $ext_ip=@words[0];
- $ext_port=@words[1];
- }
- }
- my $sess=$srvref->{$host};
- if(! $sess)
- {
- return($host, $ext_ip, $ext_port,0);
- }
- if($sess < $bestval || $bestval == -1)
- {
- $bestval=$sess;
- $bestsrv=$host;
- $bestext_ip=$ext_ip;
- $bestext_port=$ext_port;
- }
- }
- return($bestsrv, $bestext_ip, $bestext_port, $bestval);
+ my ($dn, $ldap, $user, $ip, $message)=@_;
+ my $servers;
+ my $status;
+ ($status,$servers)=remoteBroker($ip,$user,'getservers',$dn, $ldap);
+ my $srvref={};
+ my @srvlines=split("\n",$servers);
+ foreach(@srvlines)
+ {
+ my @words=split(' ',$_);
+ $srvref->{@words[0]}=1*@words[1];
+ }
+ my $bestval=-1;
+ my $bestsrv;
+ my $bestext_ip;
+ my $bestext_port;
+ foreach ($message->entries)
+ {
+ my $asn=$_->{'asn'};
+ my $attr=$asn->{'attributes'};
+ my $host;
+ my $ext_ip;
+ my $ext_port;
+ foreach (@$attr)
+ {
+ my $type=$_->{'type'};
+ my $value=$_->{'vals'}[0];
+ if( $type eq 'cn' )
+ {
+ $host=$value;
+ }
+ if($type eq 'description')
+ {
+ my @words=split(":",$value);
+ $ext_ip=@words[0];
+ $ext_port=@words[1];
+ }
+ }
+ my $sess=$srvref->{$host};
+ if( ! $sess )
+ {
+ return($host, $ext_ip, $ext_port,0);
+ }
+ if($sess < $bestval || $bestval == -1)
+ {
+ $bestval=$sess;
+ $bestsrv=$host;
+ $bestext_ip=$ext_ip;
+ $bestext_port=$ext_port;
+ }
+ }
+ return($bestsrv, $bestext_ip, $bestext_port, $bestval);
}
1;
hooks/post-receive
--
x2gobroker.git (HTTP(S) Session broker for X2Go)
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 "x2gobroker.git" (HTTP(S) Session broker for X2Go).
More information about the x2go-commits
mailing list