#!/usr/bin/perl

# Copyright (C) 2007-2015 X2Go Project - http://wiki.x2go.org
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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 General Public License for more details.
#
# You should have received a copy of the GNU 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.
#
# Copyright (C) 2007-2015 Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>
# Copyright (C) 2007-2015 Heinz-Markus Graesing <heinz-m.graesing@obviously-nice.de>

use strict;
use Sys::Syslog qw( :standard :macros );

use X2Go::Config qw( get_config);
use X2Go::Log qw( loglevel );
use X2Go::Utils qw( system_capture_merged_output );

use English;

openlog($0,'cons,pid','user');
setlogmask( LOG_UPTO(loglevel()) );

syslog('info', "x2gosessionlimit has been called");

my $maxlimit=-1;
my $Config = get_config();

sub getGroupLimit
{
	my $group=shift;
	my $strlimit=$Config->param("limit groups.$group");
	if ($strlimit ne "")
	{
		if ($strlimit == 0)
		{
			print "0\n";
			exit 0;
		}
		if ($strlimit > $maxlimit)
		{
			$maxlimit=$strlimit;
		}
	}
}

my $uname;
$uname=getpwuid($<);

my $runningsessions=system_capture_merged_output("x2golistsessions", "--all-servers");
my @sessions=split("\n",$runningsessions);
my $scount=@sessions;

my $strlimit=$Config->param("limit users.$uname");

if($strlimit ne "")
{
	if ($strlimit == 0)
	{
		print "0\n";
		closelog;
		exit 0;
	}
	if ($scount < $strlimit)
	{
		print "$strlimit\n";
		closelog;
		exit 0;
	}
	print "LIMIT\n";
	exit 0;
}


my @assigned_groups = split (" ", $REAL_GROUP_ID);

foreach my $current_group (@assigned_groups) {
	my $name = getgrgid ($current_group);

	if (defined ($name)) {
		getGroupLimit $name;
	}
}

if ($scount < $maxlimit)
{
	print "$maxlimit\n";
	closelog;
	exit 0;
}

if ($maxlimit != -1) {
	print "LIMIT\n";
	closelog;
	exit 0;
}

# closing syslog 
closelog;

