[X2Go-Commits] x2gobroker.git - build-main (branch) updated: bd1f9e0e3e0f14d7d98c537ef3bfeb19b025a9e5
X2Go dev team
git-admin at x2go.org
Sun May 19 13:02:55 CEST 2013
The branch, build-main has been updated
via bd1f9e0e3e0f14d7d98c537ef3bfeb19b025a9e5 (commit)
from 57030875e10c269c360ac2b1c1623b9f427d6714 (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:
Makefile | 4 +-
Makefile.PL | 9 -
README.dangerous-piece-of-code | 11 -
X2Go/Broker.pm | 60 --
X2Go/Broker/Common.pm | 49 --
X2Go/Broker/LDAP.pm | 633 ---------------------
X2Go/Broker/Simple.pm | 633 ---------------------
X2Go/Broker/ZeroConf.pm | 184 ------
cgi/x2gobroker.cgi | 97 ----
cgi/x2gobroker.py | 152 +++++
debian/rules | 8 +-
debian/x2gobroker-common.install | 1 +
debian/x2gobroker.pam | 2 -
lib/x2gobroker-agent.pl | 28 +-
pam/x2gobroker | 2 +
etc/x2gobroker-ldap.cfg => setup.py | 27 +-
etc/x2gobroker-ldap.cfg => x2gobroker/__init__.py | 13 +-
x2gobroker/__init__.pyc | Bin 0 -> 208 bytes
x2gobroker/base.py | 157 +++++
x2gobroker/base.pyc | Bin 0 -> 4707 bytes
etc/x2gobroker-ldap.cfg => x2gobroker/ldap.py | 35 +-
etc/x2gobroker-ldap.cfg => x2gobroker/simple.py | 35 +-
x2gobroker/zeroconf.py | 56 ++
x2gobroker/zeroconf.pyc | Bin 0 -> 1126 bytes
24 files changed, 470 insertions(+), 1726 deletions(-)
delete mode 100644 Makefile.PL
delete mode 100644 README.dangerous-piece-of-code
delete mode 100644 X2Go/Broker.pm
delete mode 100644 X2Go/Broker/Common.pm
delete mode 100644 X2Go/Broker/LDAP.pm
delete mode 100644 X2Go/Broker/Simple.pm
delete mode 100644 X2Go/Broker/ZeroConf.pm
delete mode 100755 cgi/x2gobroker.cgi
create mode 100755 cgi/x2gobroker.py
delete mode 100644 debian/x2gobroker.pam
create mode 100644 pam/x2gobroker
copy etc/x2gobroker-ldap.cfg => setup.py (59%)
mode change 100644 => 100755
copy etc/x2gobroker-ldap.cfg => x2gobroker/__init__.py (69%)
create mode 100644 x2gobroker/__init__.pyc
create mode 100644 x2gobroker/base.py
create mode 100644 x2gobroker/base.pyc
copy etc/x2gobroker-ldap.cfg => x2gobroker/ldap.py (59%)
copy etc/x2gobroker-ldap.cfg => x2gobroker/simple.py (59%)
create mode 100644 x2gobroker/zeroconf.py
create mode 100644 x2gobroker/zeroconf.pyc
The diff of changes is:
diff --git a/Makefile b/Makefile
index 0cf6a8b..3a68e40 100755
--- a/Makefile
+++ b/Makefile
@@ -55,8 +55,8 @@ build_setuidwrappers:
gcc -fPIE -pie -o lib/x2gobroker-agent src/x2gobroker-agent.c
build-indep:
- $(PERL) Makefile.PL INSTALLDIRS=vendor
- $(MAKE) -f Makefile.perl
+# $(PERL) Makefile.PL INSTALLDIRS=vendor
+# $(MAKE) -f Makefile.perl
distclean: clean
diff --git a/Makefile.PL b/Makefile.PL
deleted file mode 100644
index 1b63b56..0000000
--- a/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/usr/bin/perl
-
-use ExtUtils::MakeMaker;
-
-WriteMakefile(FIRST_MAKEFILE => 'Makefile.perl',
- PMLIBDIRS => ['X2Go'],
- NAME => '',
- VERSION => '0.0.0.1',
- );
diff --git a/README.dangerous-piece-of-code b/README.dangerous-piece-of-code
deleted file mode 100644
index 0909f32..0000000
--- a/README.dangerous-piece-of-code
+++ /dev/null
@@ -1,11 +0,0 @@
-X2Go subproject: X2Go Session Broker (x2gobroker.git)
------------------------------------------------------
-
-Whoever takes a look at this piece of code...
-
-It is currently a quite dangerous piece of software and not at all usable.
-
-Please stay away from it.
-
-light+love, 20120916
-Mike Gabriel
diff --git a/X2Go/Broker.pm b/X2Go/Broker.pm
deleted file mode 100644
index 62d0da0..0000000
--- a/X2Go/Broker.pm
+++ /dev/null
@@ -1,60 +0,0 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-package X2Go::Broker;
-
-=head1 NAME
-
-X2Go::Broker - X2GO Session Broker modules for Perl
-
-=head1 DESCRIPTION
-
-An X2Go Session Broker allows to manage X2Go server farms TTW (using
-https protocol).
-
-=head1 VERSION
-
-Version 0.0.0.1
-
-=head1 AUTHOR
-
-Oleksandr Shneyder, C<< <oleksandr.shneyder at obviously-nice.de> >>
-
-Mike Gabriel, C<< <mike.gabriel at das-netzwerkteam.de> >>
-
-=head1 LICENSE AND COPYRIGHT
-
-Copyright 2011-2012, Oleksandr Shneyder, C<< <oleksandr.shneyder at obviously-nice.de> >>
-
-Copyright 2012, Mike Gabriel, C<< <mike.gabriel at das-netzwerkteam.de> >>
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the AGPL-3+ license.
-
-=cut
-
-use strict;
-
-### for debugging purposes...
-#use Data::Dumper;
-
-use base 'Exporter';
-our @EXPORT = ( );
-
diff --git a/X2Go/Broker/Common.pm b/X2Go/Broker/Common.pm
deleted file mode 100644
index f480082..0000000
--- a/X2Go/Broker/Common.pm
+++ /dev/null
@@ -1,49 +0,0 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-package X2Go::Broker::Common;
-
-use strict;
-
-### for debugging purposes...
-#use Data::Dumper;
-
-use base 'Exporter';
-our @EXPORT = ('ExecBrokerAgent', );
-
-###
-### public functions
-###
-
-sub ExecBrokerAgent
-{
- my ($user, $hostname, $cmd)=@_;
- my $res=`ssh -o ConnectTimeout=15 -o UserKnownHostsFile=/etc/x2go/x2gobroker/ts_known_hosts x2gobroker\@$hostname -i /etc/x2go/x2gobroker/id_x2gobroker_dsa \"/usr/lib/x2go/x2gobroker-agent $user $cmd 2>/dev/null\"`;
- my @rarr=split("\n",$res);
- my $stat;
- if( @rarr[0] eq 'OK' )
- {
- $stat=1;
- } else {
- $stat=0;
- }
- shift(@rarr);
- return($stat,join("\n", at rarr));
-}
diff --git a/X2Go/Broker/LDAP.pm b/X2Go/Broker/LDAP.pm
deleted file mode 100644
index d05d63f..0000000
--- a/X2Go/Broker/LDAP.pm
+++ /dev/null
@@ -1,633 +0,0 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-package x2gobroker-ldap;
-
-use strict;
-use Net::LDAP;
-use Config::Simple;
-use Crypt::SaltedHash;
-use MIME::Base64;
-use Data::Dumper;
-
-
-my $cfg=new Config::Simple(syntax=>'ini');
-$cfg->read("/etc/x2go/x2gobroker-ldap.cfg");
-my $ldapuri=$cfg->param('ldapuri');
-my $replica=$cfg->param('replica');
-my $binddn=$cfg->param('binddn');
-my $bindpw=$cfg->param('bindpw');
-
-use base 'Exporter';
-our @EXPORT = ('checkAccess', 'listSessions', 'selectSession', 'setPass');
-
-sub getBase
-###
-### FIXME: provide that in /etc/x2go/x2gobroker-ldap.cfg
-### FIXME: put the pid of this process in the lock files
-{
- 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;
- }
-}
-
-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;
-}
-
-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);
-}
-
-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";
-}
-
-sub selectSession
-{
- 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);
- ####
- #### 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";
- }
-}
-
-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);
- ####
- #### 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)
- {
- 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;
- }
- print "error searching $node_dn: ".$mesg->error."\n";
- return 0;
-}
-
-sub startNewSession
-{
- 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)
- {
- delete $nodes->{$key};
- }
- }
- }
- 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);
-}
-
-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'})
- {
- $bestnode=$value;
- $bestnodekey=$key;
- }
- }
- }
- 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);
-}
-
-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);
- }
-}
-
-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));
-}
-
-sub notify
-{
- 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");
-}
-
-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");
-}
-
-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 )
- {
- return 0;
- }
-
- my @entries=$mesg->entries();
- my $crypted=@entries[0]->get_value('userPassword');
- $mesg = $ldap->unbind;
- if ( Crypt::SaltedHash->validate($crypted, $pass) )
- {
- 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();
-}
-
-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);
-}
-
-1;
diff --git a/X2Go/Broker/Simple.pm b/X2Go/Broker/Simple.pm
deleted file mode 100644
index 5e56c28..0000000
--- a/X2Go/Broker/Simple.pm
+++ /dev/null
@@ -1,633 +0,0 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-package x2gobroker-simple;
-
-use strict;
-use Net::LDAP;
-use Config::Simple;
-use Crypt::SaltedHash;
-use MIME::Base64;
-use Data::Dumper;
-
-
-my $cfg=new Config::Simple(syntax=>'ini');
-$cfg->read("/etc/x2go/x2gobroker-simple.cfg");
-my $ldapuri=$cfg->param('ldapuri');
-my $replica=$cfg->param('replica');
-my $binddn=$cfg->param('binddn');
-my $bindpw=$cfg->param('bindpw');
-
-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;
-}
-
-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;
- }
-}
-
-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;
-}
-
-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);
-}
-
-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";
-}
-
-sub selectSession
-{
- 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);
- ####
- #### 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";
- }
-}
-
-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);
- ####
- #### 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)
- {
- 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;
- }
- print "error searching $node_dn: ".$mesg->error."\n";
- return 0;
-}
-
-sub startNewSession
-{
- 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)
- {
- delete $nodes->{$key};
- }
- }
- }
- 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);
-}
-
-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'})
- {
- $bestnode=$value;
- $bestnodekey=$key;
- }
- }
- }
- 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);
-}
-
-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);
- }
-}
-
-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));
-}
-
-sub notify
-{
- 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");
-}
-
-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");
-}
-
-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 )
- {
- return 0;
- }
-
- my @entries=$mesg->entries();
- my $crypted=@entries[0]->get_value('userPassword');
- $mesg = $ldap->unbind;
- if ( Crypt::SaltedHash->validate($crypted, $pass) )
- {
- 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();
-}
-
-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);
-}
-
-1;
diff --git a/X2Go/Broker/ZeroConf.pm b/X2Go/Broker/ZeroConf.pm
deleted file mode 100644
index da4eb98..0000000
--- a/X2Go/Broker/ZeroConf.pm
+++ /dev/null
@@ -1,184 +0,0 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-package X2Go::Broker::ZeroConf;
-
-use strict;
-use Sys::Hostname;
-use Authen::PAM;
-use Authen::Simple::PAM;
-use X2Go::Broker::Common;
-
-### for debugging purposes...
-#use Data::Dumper;
-
-use base 'Exporter';
-our @EXPORT = ('CheckAccess', 'ListSessions', 'SelectSession', 'SetPass', );
-
-my $hostname = hostname;
-
-###
-### public functions, available to broker cgi
-###
-
-my $username;
-my $password;
-
-### exported function ###
-sub CheckAccess
-{
- # zeroconf broker: use PAM to perform authentication against
- # the local PAM login module
- ($username, $password)=@_;
- my $pam = Authen::Simple::PAM->new(service => 'x2gobroker');
- if ( $pam->authenticate( $username, $password ) ) {
- # successfull authentication
- return 0
- }
- return 1;
-}
-
-### exported function ###
-sub SetPass
-{
- ###
- ### the broker API in X2Go Client currently requests a password change
- ### without verifying the old password, this needs to be fixed...
- ###
-
- my ($username, $oldpassword, $newpassword)=@_;
-
- # zeroconf broker: use PAM to initiate a local passwd change
- my $service = "x2gobroker";
- my $pamh = new Authen::PAM($service, $username, \&passwd_conv_func) ||
- die "Error code \$pamh during PAM init!";
- my $state = 0;
- my $res = $pamh->pam_chauthtok;
- die $pamh->pam_strerror($res) unless $res == PAM_SUCCESS();
-
- print "\n<br>CHANGING PASS OK<br>\n";
-}
-
-### exported function ###
-sub SelectSession
-{
- my ($user, $session_id)=@_;
- my @words=split("\@",$session_id);
- ###
- ### FIXME: why the heck is the $session_id format <host>@<session>,
- ### <session>@<host> would make much more sense!!! (for
- ### the human eye...)
- ###
- my $session_id=@words[1];
- my $host=@words[0];
- check_and_start_session($user, $host, $session_id);
-}
-
-### exported function ###
-sub ListSessions
-{
- # print Dumper($message->entries);
- print "START_USER_SESSIONS<br>";
- my($status,$sessions)=CallBrokerAgent($hostname, $username, 'listsessions');
- if ( $status )
- {
- if($sessions)
- {
- my @sinfo = split("\\|",$sessions);
- my $session_status = @sinfo[4];
- my $session_id = @sinfo[1];
- print "<br>[$hostname\@$session_id]<br>";
- print "status=$session_status<br>";
- } else {
- print "<br>[$hostname]<br>";
- }
- }
- print "END_USER_SESSIONS<br>";
-}
-
-###
-### private functions, not available to broker cgi
-###
-
-# helper function for SetPass
-sub passwd_conv_func {
- my @res;
- while ( @_ ) {
- my $code = shift;
- my $msg = shift;
- my $ans = "";
- my $state;
-
- my $oldpassword;
- my $newpassword;
-
- $ans = $username if ( $code == PAM_PROMPT_ECHO_ON() );
- if ( $code == PAM_PROMPT_ECHO_OFF() ) {
- $ans = $oldpassword if ($state == 0);
- $ans = $newpassword if ($state == 1);
- $ans = $newpassword if ($state == 2);
- $state++;
- }
- push @res, (PAM_SUCCESS(),$ans);
- }
- push @res, PAM_SUCCESS();
- return @res;
-}
-
-sub check_and_start_session
-{
- my ($username, $hostname, $session_id) = @_;
- my $running;
- my ($status, $sessions)=ExecRemoteBroker($username, $hostname, 'listsessions');
- if ( ! $status )
- {
- print "ERROR: X2Go server not available\n";
- return;
- }
- my $running_sessions = 0;
- if ( $sessions )
- {
- # suspend all running sessions first...
- my @sinfo = split("\\|",$sessions);
- my $session_status = @sinfo[4];
- my $session_server = @sinfo[3];
- $session_id=@sinfo[1];
- if( $session_status eq 'R' )
- {
- $running = 1;
- my $str;
- ($status, $str) = ExecRemoteBroker($username, $hostname, "suspend $session_id");
- $sessions =~ s/\|R\|/\|S\|/;
- }
- if( $session_status eq 'S' )
- {
- $running = 1;
- }
- }
-
- print "SERVER:$hostname\n";
- if($running)
- {
- # use first session in session list...
- print "SESSION_INFO:".(split("\n",$sessions))[0]."\n";
- }
-}
-
-1;
diff --git a/cgi/x2gobroker.cgi b/cgi/x2gobroker.cgi
deleted file mode 100755
index 3d44d52..0000000
--- a/cgi/x2gobroker.cgi
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/perl
-
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
-# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
-#
-# X2Go Session Broker is free software; you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# X2Go Session Broker is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-
-use strict;
-use File::Basename qw(basename);
-
-my $cgi_name = basename($0);
-my $broker_backend = $cgi_name;
-$broker_backend =~ s/x2gobroker-(.*)\.cgi/\1/;
-
-SWITCH: {
- $broker_backend == "zeroconf" && do { use X2Go::Broker::ZeroConf qw(CheckAccess SetPass SelectSession ListSessions); last SWITCH; };
-# $broker_backend == "simple" && do { use X2Go::Broker::Simple qw(CheckAccess SetPass SelectSession ListSessions); last SWITCH; };
-# $broker_backend == "ldap" && do { use X2Go::Broker::LDAP qw(CheckAccess SetPass SelectSession ListSessions); last SWITCH; };
-}
-
-use CGI;
-use CGI::Carp qw(fatalsToBrowser);
-
-my $cgi = new CGI;
-my @formValues = $cgi->param();
-
-print $cgi->header(
- -type =>'text/html',
- -expires =>'+1h'
- ),
- $cgi->start_html(
- -title =>'X2Go Session Broker',
- -author =>'X2Go Developers <x2go-dev at lists.berlios.de>',
- -base =>'true',
- -meta =>{'keywords' =>'X2Go', 'description'=>'X2Go Session Broker'}
- );
-
-if($cgi->param('task') eq 'testcon')
-{
- 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 )
-{
- print_no_access();
- print $cgi->end_html();
- exit (0);
-}
-
-print $cgi->start_form(),
-$cgi->strong('Access granted');
-
-if ($cgi->param('task') eq 'listsessions')
-{
- ListSessions($cgi->param('user'));
-}
-
-if ($cgi->param('task') eq 'selectsession')
-{
- SelectSession($cgi->param('user'), $cgi->param('sid'));
-}
-
-if ($cgi->param('task') eq 'setpass')
-{
- SetPass($cgi->param('user'), $cgi->param('newpass'));
-}
-
-$cgi->hr(),
-$cgi->end_form();
-print $cgi->end_html();
-
-sub print_no_access
-{
- print $cgi->start_form(),
- $cgi->hr(),
- $cgi->strong('Access denied'),
- $cgi->end_form();
-}
diff --git a/cgi/x2gobroker.py b/cgi/x2gobroker.py
new file mode 100755
index 0000000..103a6a5
--- /dev/null
+++ b/cgi/x2gobroker.py
@@ -0,0 +1,152 @@
+#!/usr/bin/env python
+
+# This file is part of the X2Go Project - http://www.x2go.org
+# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+#
+# X2Go Session Broker is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# X2Go Session Broker is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import sys
+import os
+import web
+
+try:
+ import x2gobroker
+except ImportError:
+ sys.path.insert(0, os.path.join(os.getcwd(), '..'))
+
+# FIXME: here we have to add some code that genuinely detects the session broker backend...
+broker_backend = "zeroconf"
+
+# load the requested broker
+if broker_backend == "zeroconf":
+ import x2gobroker.zeroconf as broker
+elif broker_backend == "simple":
+ import x2gobroker.simple as broker
+elif broker_backend == "ldap":
+ import x2gobroker.ldap as broker
+
+
+urls = ( '/', 'x2gobroker' )
+
+
+class x2gobroker:
+
+ broker_backend = broker.X2GoBroker()
+
+ http_header_items = {
+ 'Content-Type': 'text/html; charset=utf-8',
+ 'Expires': '+1h',
+ }
+
+ page = web.template.Template("""$def with (html_header_items, output)
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+<head>
+$for meta_tag in html_header_items["meta"]:
+ <meta $meta_tag="$html_header_items["meta"][meta_tag]">
+<title>$html_header_items['title']</title>
+</head>
+
+<body>
+$output
+</body>
+</html>
+"""
+ )
+ html_header_items = {
+ 'title': 'X2Go Session Broker',
+ 'meta': {
+ 'author': 'X2Go Developers <x2go-dev at lists.berlios.de>',
+ 'charset': 'utf-8',
+ 'keywords': 'X2Go',
+ 'description': 'X2Go Session Broker',
+ },
+ }
+
+ def _gen_http_header(self):
+
+ for http_header_item in self.http_header_items.keys():
+ web.header(http_header_item, self.http_header_items[http_header_item])
+
+ def GET(self):
+
+ data = web.input()
+ output = ''
+
+ self._gen_http_header()
+
+
+ # FIXME: the ,,testcon'' task can be object to DoS attacks...
+ if hasattr(data, 'task') and data.task == 'testcon':
+
+ ###
+ ### TEST THE CONNECTION
+ ###
+
+ return self.broker_backend.test_connection()
+
+ if hasattr(data, 'user') and hasattr(data, 'password') and self.broker_backend.check_access(username=data.user, password=data.password):
+
+ ###
+ ### PERFORM INITIAL AUTHENTICATION
+ ###
+
+ output += "<strong>Access granted</strong><br />"
+ output += "AUTHID: {authid}<br />".format(authid=self.broker_backend.get_next_authid(username=data.user))
+ return self.page(self.html_header_items, output)
+
+ else:
+ return self.page(self.html_header_items, "<hr>Access denied")
+
+ if hasattr(data, 'user') and hasattr(data, 'authid'):
+
+ ###
+ ### X2GO BROKER TASKS
+ ###
+
+ if self.broker_backend.check_access(username=data.user, authid=data.authid):
+
+ if hasattr(data, 'task'):
+ task = data.task
+
+ if task == 'listsessions':
+
+ output += self.broker_backend.list_sessions()
+
+ if task == 'selectsession':
+
+ if hasattr(data, 'sid'):
+
+ output += self.broker_backend.select_session(session_name=data.sid)
+
+ if task == 'setpass':
+
+ if hasattr(data, 'oldpass') and hasattr(data, 'newpass'):
+
+ output += self.broker_backend.change_password(new=data.newpass, old=data.oldpass)
+
+ return self.page(self.html_header_items, output)
+
+ else:
+ return self.page(self.html_header_items, "<hr>Access denied")
+
+
+if __name__ == "__main__":
+ app = web.application(urls, globals())
+ app.internalerror = web.debugerror
+ app.run()
diff --git a/debian/rules b/debian/rules
index 8b53e5a..787fc72 100755
--- a/debian/rules
+++ b/debian/rules
@@ -21,8 +21,8 @@ export DEB_BUILD_MAINT_OPTIONS = hardening=+all
export DEB_CFLAGS_MAINT_APPEND = -Wall
include /usr/share/dpkg/buildflags.mk
-DEB_PERL_PACKAGES=libx2go-broker-perl
-DEB_PERL_CLEAN_TARGET=realclean
-include /usr/share/cdbs/1/class/perl-makemaker.mk
+#DEB_PERL_PACKAGES=libx2go-broker-perl
+#DEB_PERL_CLEAN_TARGET=realclean
+#include /usr/share/cdbs/1/class/perl-makemaker.mk
include /usr/share/cdbs/1/rules/debhelper.mk
-
+include /usr/share/cdbs/1/class/python-distutils.mk
diff --git a/debian/x2gobroker-common.install b/debian/x2gobroker-common.install
index e9793a9..a688ac6 100644
--- a/debian/x2gobroker-common.install
+++ b/debian/x2gobroker-common.install
@@ -1 +1,2 @@
cgi/x2gobroker.cgi usr/lib/cgi-bin/
+pam/x2gobroker etc/pam.d/
\ No newline at end of file
diff --git a/debian/x2gobroker.pam b/debian/x2gobroker.pam
deleted file mode 100644
index 1eaad76..0000000
--- a/debian/x2gobroker.pam
+++ /dev/null
@@ -1,2 +0,0 @@
- at include common-auth
- at include common-passwd
diff --git a/lib/x2gobroker-agent.pl b/lib/x2gobroker-agent.pl
index 0d5b559..6a64bbf 100755
--- a/lib/x2gobroker-agent.pl
+++ b/lib/x2gobroker-agent.pl
@@ -1,4 +1,4 @@
-#!/usr/bin/perl -wU
+#!/usr/bin/perl -XU
# This file is part of the X2Go Project - http://www.x2go.org
# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
@@ -24,7 +24,7 @@ use strict;
sub InitX2GoUser
{
- my ($user, $uid, $gid, $home)=@_;
+ my ($user, $uidNumber, $gidNumber, $home)=@_;
if ( -f "/etc/x2go/x2gosql/sql" )
{
@@ -56,11 +56,11 @@ sub CreateKey
### authorized_keys file is starting to get
### scared... (Mike)
###
- #my ($uid, $gid, $home)=@_;
+ #my ($uidNumber, $gidNumber, $home)=@_;
#if ( ! -d "$home/.ssh" )
#{
# mkdir ("$home/.ssh", 0700);
- # chown ($uid, $gid, "$home/.ssh");
+ # chown ($uidNumber, $gidNumber, "$home/.ssh");
#}
#if( -e "$home/.ssh/authorized_keys" )
#{
@@ -84,41 +84,41 @@ $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 ($uid, $passwd, $uidNumber, $gidNumber, $quota, $comment, $gcos, $home, $shell, $expire) = getpwnam($username);
-if($uid < 1000)
+if($uidNumber < 1000)
{
die 'operation on system user';
}
if($mode eq 'listsessions')
{
- InitX2GoUser($name, $uid, $gid, $home);
+ InitX2GoUser($uid, $uidNumber, $gidNumber, $home);
print "OK\n";
- system "/bin/su - ", $name, "-c", "x2golistsessions --all-servers";
+ exec ("/bin/su - $uid -c \"x2golistsessions --all-servers\"");
}
if($mode eq 'getservers')
{
- InitX2GoUser($name, $uid, $gid, $home);
+ InitX2GoUser($uid, $uidNumber, $gidNumber, $home);
print "OK\n";
- system "/bin/su - ", $name, "-c", "x2gogetservers";
+ exec ("/bin/su - $uid -c \"x2gogetservers\"");
}
if($mode eq 'key')
{
- InitX2GoUser($name, $uid, $gid, $home);
+ InitX2GoUser($uid, $uidNumber, $gidNumber, $home);
print "OK\n";
- createKey($uid, $gid, $home);
+ createKey($uidNumber, $gidNumber, $home);
}
if($mode eq 'suspend')
{
- InitX2GoUser($name, $uid, $gid, $home);
+ InitX2GoUser($uid, $uidNumber, $gidNumber, $home);
print "OK\n";
my $sid=shift;
- system "/bin/su - ", $name, "-c", "x2gosuspend-session $sid";
+ exec ("/bin/su - $uid -c \"x2gosuspend-session $sid\"");
}
if($mode eq 'ping')
diff --git a/pam/x2gobroker b/pam/x2gobroker
new file mode 100644
index 0000000..b561496
--- /dev/null
+++ b/pam/x2gobroker
@@ -0,0 +1,2 @@
+ at include common-auth
+ at include common-password
diff --git a/etc/x2gobroker-ldap.cfg b/setup.py
old mode 100644
new mode 100755
similarity index 59%
copy from etc/x2gobroker-ldap.cfg
copy to setup.py
index fe8e9bd..b791870
--- a/etc/x2gobroker-ldap.cfg
+++ b/setup.py
@@ -1,7 +1,11 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+# -*- coding: utf-8 -*-
+
# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+# Copyright (C) 2012 by Heinz-M. Graesing <heint-m.graesing at obviously-nice.de>
#
# X2Go Session Broker is free software; you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -18,7 +22,16 @@
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-ldapuri=ldap://<ldapmaster.localdomain>
-#replica=ldapi:///
-binddn="cn=admin,dc=example,dc=net"
-bindpw="<very-secret>"
+from setuptools import setup, find_packages
+import x2go
+
+setup(
+ name = "x2gobroker",
+ version = x2gobroker.__VERSION__,
+ description = "X2Go Session Broker",
+ license = 'AGPLv3+',
+ author = 'Mike Gabriel',
+ url = 'http://www.x2go.org',
+ packages = find_packages('.'),
+ package_dir = {'': '.'},
+)
diff --git a/etc/x2gobroker-ldap.cfg b/x2gobroker/__init__.py
similarity index 69%
copy from etc/x2gobroker-ldap.cfg
copy to x2gobroker/__init__.py
index fe8e9bd..ad8c1e4 100644
--- a/etc/x2gobroker-ldap.cfg
+++ b/x2gobroker/__init__.py
@@ -1,7 +1,7 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+# -*- coding: utf-8 -*-
+
# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
#
# X2Go Session Broker is free software; you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -18,7 +18,6 @@
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-ldapuri=ldap://<ldapmaster.localdomain>
-#replica=ldapi:///
-binddn="cn=admin,dc=example,dc=net"
-bindpw="<very-secret>"
+__VERSION__ = '0.0.0.1'
+
+
diff --git a/x2gobroker/__init__.pyc b/x2gobroker/__init__.pyc
new file mode 100644
index 0000000..302cf0f
Binary files /dev/null and b/x2gobroker/__init__.pyc differ
diff --git a/x2gobroker/base.py b/x2gobroker/base.py
new file mode 100644
index 0000000..a1fe0ca
--- /dev/null
+++ b/x2gobroker/base.py
@@ -0,0 +1,157 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+#
+# X2Go Session Broker is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# X2Go Session Broker is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+"""\
+X2goBrokerBASE class - base skeleton for X2GoBroker implementations
+
+"""
+__NAME__ = 'x2gobroker-pylib'
+
+# modules
+import types
+import uuid
+
+class X2GoBroker(object):
+ """\
+ X2GoBrokerBASE is an abstract class for X2Go broker implementations.
+
+ This class needs to be inherited from a concrete broker class.
+
+ Currently available broker classes are::
+ L{zeroconf.X2GoBroker}
+ L{simple.X2GoBroker}
+ L{ldap.X2GoBroker}
+
+ """
+ def __init__(self):
+ """\
+ Initialize a new X2GoBroker instance to control X2Go session through an
+ X2Go Client with an intermediate session broker.
+ """
+ self._authid_dict = {}
+
+ def __del__(self):
+ """\
+ Cleanup on destruction of an L{X2GoBroker} instance.
+
+ """
+ pass
+
+ def test_connection(self):
+ #if($cgi->param('task') eq 'testcon')
+ #{
+ # for ( my $i=0;$i<2*1024*1024;$i++ )
+ # {
+ # print int(rand(9));
+ # }
+ # print $cgi->end_html();
+ # exit (0);
+ #}
+ return 'OK'
+
+ def check_access(self, username='', password='', authid=None):
+ """\
+ Check if a given user with a given password may gain access to the
+ X2Go session broker.
+
+ @param username: a username known to the session broker
+ @type username: C{unicode}
+ @param password: a password that authenticates the user against the X2Go session broker
+ @type password: C{unicode}
+
+ @return: returns C{True} if the authentication has been successful
+ @rtype: C{bool}
+
+ """
+
+ ### IMPLEMENT YOUR AUTHENTICATION LOGIC FIRST, then call base.X2GoBroker.check_access
+ ### to finalize the authentication process.
+
+ # Before calling this code, you have to evaluate username and password.
+ #
+ # If the credentials (username, password) are considered as valid then
+ # set authid to True.
+ #
+ # If credentials are invalid, set authid to None.
+
+ if type(authid) is types.StringType:
+ authid = unicode(authid)
+
+ if type(authid) is types.UnicodeType:
+
+ if authid == self._authid_dict[username]:
+ self._authid_dict[username] = uuid.uuid5(namespace=authid, name=username)
+ return True
+
+ elif type(authid) is types.BooleanType and authid is True:
+ # generate a first uuid, initialize the connection
+ self._authid_dict[username] = uuid.uuid4()
+ return True
+
+ return False
+
+ def get_next_authid(self, username):
+ """\
+ Get the next expected authentication ID for the given user name.
+
+ @param username: query next auth ID for this user
+ @type username: C{unicode}
+
+ @return: returns next authentication ID for the given username, None if no auth ID has been generated, yet.
+ @rtype: C{unicode} or C{None}
+
+ """
+ try:
+ return self._authid_dict[username]
+ except KeyError:
+ return None
+
+ def list_sessions(self, username):
+ """\
+ Retrieve a list of running/suspended sessions for the user that has authenticated to this
+ L{X2GoBroker} instance
+
+ @param username: query session list for this user
+ @type username: C{unicode}
+
+ return: list of session objects
+ rtype: C{obj}
+
+ """
+ return []
+
+ def select_session(self, session_name=None):
+ """\
+ Select a running/suspended session to be transferred/resumed to the requesting X2Go Client.
+ If no C{session_name} is given, a new X2Go session is launched for the authenticated user.
+
+ The X2Go server that the session is launched on is selected automatically by the X2Go session
+ broker.
+
+ """
+ return None
+
+ def change_password(self, new='', old=''):
+ """\
+ Modify the authenticated user's password on the X2Go infrastructure (normally, one user
+ in one X2Go site setup should have the same password on all machines).
+
+ """
+ return False
diff --git a/x2gobroker/base.pyc b/x2gobroker/base.pyc
new file mode 100644
index 0000000..9a9b5ac
Binary files /dev/null and b/x2gobroker/base.pyc differ
diff --git a/etc/x2gobroker-ldap.cfg b/x2gobroker/ldap.py
similarity index 59%
copy from etc/x2gobroker-ldap.cfg
copy to x2gobroker/ldap.py
index fe8e9bd..25fc8b4 100644
--- a/etc/x2gobroker-ldap.cfg
+++ b/x2gobroker/ldap.py
@@ -1,7 +1,7 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+# -*- coding: utf-8 -*-
+
# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
#
# X2Go Session Broker is free software; you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -18,7 +18,28 @@
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-ldapuri=ldap://<ldapmaster.localdomain>
-#replica=ldapi:///
-binddn="cn=admin,dc=example,dc=net"
-bindpw="<very-secret>"
+"""\
+X2goBrokerLDAP class - a production X2GoBroker implementations that uses LDAP as configuration backend
+
+"""
+__NAME__ = 'x2gobroker-pylib'
+
+# modules
+import x2gobroker.base
+
+class X2GoBroker(x2gobroker.base.X2GoBroker):
+ """\
+
+ """
+ def __init__(self):
+ """\
+
+ """
+ x2gobroker.base.X2GoBroker.__init__(self)
+
+ def __del__(self):
+ """\
+
+ """
+ x2gobroker.base.X2GoBroker.__del__(self)
+
diff --git a/etc/x2gobroker-ldap.cfg b/x2gobroker/simple.py
similarity index 59%
copy from etc/x2gobroker-ldap.cfg
copy to x2gobroker/simple.py
index fe8e9bd..ea3fc87 100644
--- a/etc/x2gobroker-ldap.cfg
+++ b/x2gobroker/simple.py
@@ -1,7 +1,7 @@
-# This file is part of the X2Go Project - http://www.x2go.org
-# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
-# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+# -*- coding: utf-8 -*-
+
# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
#
# X2Go Session Broker is free software; you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
@@ -18,7 +18,28 @@
# Free Software Foundation, Inc.,
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
-ldapuri=ldap://<ldapmaster.localdomain>
-#replica=ldapi:///
-binddn="cn=admin,dc=example,dc=net"
-bindpw="<very-secret>"
+"""\
+X2goBrokerSIMPLE class - a simple X2GoBroker implementations that uses text-based config files only
+
+"""
+__NAME__ = 'x2gobroker-pylib'
+
+# modules
+import x2gobroker.base
+
+class X2GoBroker(x2gobroker.base.X2GoBroker):
+ """\
+
+ """
+ def __init__(self):
+ """\
+
+ """
+ x2gobroker.base.X2GoBroker.__init__(self)
+
+ def __del__(self):
+ """\
+
+ """
+ x2gobroker.base.X2GoBroker.__del__(self)
+
diff --git a/x2gobroker/zeroconf.py b/x2gobroker/zeroconf.py
new file mode 100644
index 0000000..af0da2d
--- /dev/null
+++ b/x2gobroker/zeroconf.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+#
+# X2Go Session Broker is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# X2Go Session Broker is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+"""\
+X2goBrokerZEROCONF class - a demo X2GoBroker implementations that needs not configuration at all
+
+"""
+__NAME__ = 'x2gobroker-pylib'
+
+# modules
+import pam
+import subprocess
+
+import x2gobroker.base
+
+from x2gobroker.defaults import X2GOBROKER_AGENT_CMD as _X2GOBROKER_AGENT_CMD
+
+class X2GoBroker(x2gobroker.base.X2GoBroker):
+
+ def check_access(self, username='', password='', authid=None):
+
+ # do a simple PAM authentication against the PAM service ,,x2gobroker''
+ if authid is None:
+ if username and password:
+ if pam.authenticate(username, password, service="x2gobroker"):
+ authid = True
+ else:
+ authid = None
+
+ return x2gobroker.base.X2GoBroker.check_access(self, username=username, password=password, authid=authid)
+
+ def list_sessions(self, username):
+
+ # simply call the local x2gobroker-agent to retrieve a session list for <username>
+ cmd_line = [ _X2GOBROKER_AGENT_CMD, username, "listsessions" ]
+ broker_agent = subprocess.Popen(cmd_line)
+
+ return broker_agent.stdout()
+
diff --git a/x2gobroker/zeroconf.pyc b/x2gobroker/zeroconf.pyc
new file mode 100644
index 0000000..fbbca0e
Binary files /dev/null and b/x2gobroker/zeroconf.pyc differ
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