#!/usr/bin/perl
# Argument: username password addresseIp adresseMac
# Auteur Secret Olivier

use strict;
use warnings;
use Authen::PAM;
use POSIX qw(ttyname);

require '/usr/lib/kwartz/control/sharelib.pl';
require 'hostlib.pl';

if ($#ARGV != 3)
{
    die "Usage : $0 Username Password AdresseIp AdresseMac\n";
}


### Variable
my $service = "login";
my $username = "$ARGV[0]";
my $password = "$ARGV[1]";
my $ip = "$ARGV[2]";
my $mac = "$ARGV[3]";
my $pamh;
my $ret;
my $tty_name = ttyname(fileno(STDIN));
my $i = 0;

my @res;
my @image;


### Fonction
sub my_conv_func
{
    while ( @_ )
    {
        my $code = shift;
        my $msg = shift;
        my $ans = "";
        
        $ans = $username if ($code == PAM_PROMPT_ECHO_ON );
        $ans = $password if ($code == PAM_PROMPT_ECHO_OFF );
        
        push @res, (PAM_SUCCESS,$ans);
    }
    push @res, PAM_SUCCESS;
    return @res;
}


### Main

# Verification des arguments
if (length($username) < 1 || length($password) < 1 || length($ip) < 7 || length($mac) != 17)
{
    die "Erreur : Arguments too small";
}

# Test du groupe
if (length(`groups $username | grep winadmin`) == 0)
{
#    sleep(3);
    print STDERR "$username n'est pas dans le groupe winadmin\n";
	print "KO";
    exit 0;
}

# Test du login/password
ref($pamh = new Authen::PAM($service, $username, \&my_conv_func)) ||
    die "Error code $pamh during PAM init!";
$ret = $pamh->pam_set_item(PAM_TTY, $tty_name) if (defined($tty_name));
$ret = $pamh->pam_authenticate;
#sleep(3);

if ($ret == 0)
{
    print STDERR "$username : Authentification OK\n";
	print "OK";
}
else
{
    print STDERR "$username : Authentification failure\n";
	print "KO";
}
exit 0;
