Buongiorno a tutti!
Dopo lunghi e faticosi tentativi
...vi posto la prima versione funzionante dello script, script che attualmente è in test sul mail server:
codice:
#!/usr/bin/perl -w
use Authen::PAM;
$| = 1; #force STDOUT autoflush after each write
my ($seq,$vrfy,$mode,$user,$passw);
sub pam_conv_func {
my @res;
while ( @_ ) {
my $msg_type = shift;
my $msg = shift;
#print $msg;
push @res, 0;
push @res, $passw;
}
push @res, PAM_SUCCESS;
return @res;
}
while(<STDIN>) {
($seq,$vrfy,$mode,$user,$passw) = split(/ /);
unless($mode =~ /^\(.*\)$/) {
$passw=$user; $user=$mode;
}
print "contenuto di passwd prima delle verifiche $passwd\n";
print "contenuto di user prima delle verifiche $user\n";
unless($seq && $vrfy && $user && $passw) {
print "$seq ERROR Wrong arguments\n";
} elsif($vrfy ne 'VRFY') {
print "$seq ERROR Only clear text passwords supported\n";
} else {
my ($res,$pamh,$domi); # ***mAx*** aggiunta dichiarazione variabile 'domi'
chomp($passw);
if($user =~/(.+)\@(.+)/) {$user=$1; $domi=$2} # strip the domain name if necessary + ***mAx*** assegnazione della seconda parte della stringa a $domi
if($domi eq "dominio3.com") {$user = "DOM3"."\\".$user} # ***mAx*** se dominio 3 lo chiama DOM3
elsif($domi eq "dominio2.it") {$user = "DOM2"."\\".$user} # ***mAx*** se dominio 2 lo chiama DOM2
elsif($domi eq "dominio1.eu") {$user = "DOM1"."\\".$user} # ***mAx*** se dominio 1 lo chiama DOM1
print "contenuto di user $user\n";
if(($res=pam_start("login", $user, \&pam_conv_func, $pamh))!=PAM_SUCCESS ||
($res=pam_authenticate($pamh, 0))!=PAM_SUCCESS ||
($res=pam_end($pamh, 0))!=PAM_SUCCESS) {
print "$seq ERROR ".pam_strerror($pamh,$res)."\n";
} else {
print "$seq OK \n";
}
}
}
Come si può vedere non è ancora la "versione elegante"...e mancano ancora un paio di cosine, ma a cercare di sistemare il tutto mi ci metto ora...
Quanto sopra, unitamente alla corretta configurazione di kerberos e samba, fa il lavoro che volevo...e anche velocemente...almeno in ambiente di test...
Grazie davvero a tutti!!!
mAx