Ajout de fonctions :

- Modifier passwd
- Ajouter un alias
- Fichier de log
This commit is contained in:
Gregory Colpart 2009-09-06 03:47:42 +00:00
parent efe0684408
commit 0944a0e6e3

View file

@ -33,6 +33,10 @@ our $password='XXX';
our $adminmail='admin@example.com';
our $file='/var/log/evolix.log';
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
our $date= sprintf("%4d-%02d-%02d %02d:%02d ",$year+1900,$mon+1,$mday,$hour,$min);
sub usage()
{
print STDERR << "EOF";
@ -42,16 +46,13 @@ print STDERR << "EOF";
-h : aide
-u : ajoute un compte
-d : ajoute un domaine
-a : ajoute un alias
-p : modifie un mot de passe
EOF
exit;
}
sub execldap();
{
my $test;
}
sub add()
{
printf("Entrez le mail a creer : ");
@ -253,10 +254,15 @@ EOF
Disposition => 'attachment'
);
MIME::Lite->send('smtp', "localhost", Timeout=>60);
$msg -> send;
MIME::Lite->send('smtp', "localhost", Timeout=>60);
$msg -> send;
printf("Ajout OK\n");
open F, ">>$file";
print F ("$date [add.pl] Ajout mail $login\n");
close F;
printf("Ajout OK\n");
}
sub gadd()
@ -319,14 +325,135 @@ sub gadd()
printf("Ajout OK\n");
open F, ">>$file";
print F ("$date [add.pl] Ajout domaine $domain\n");
close F;
}
# modification d'un password
sub passwd() {
printf("Entrez le compte pour réinitialiser le mot de passe : ");
my $login = <STDIN>;
chomp $login;
my $uid;
my $uidn;
my $ldap = Net::LDAP->new($host) or die "$@";
my $mesg = $ldap->bind($binddn,password => $password, version => 3);
my $result = $ldap->search(
base => $dn,
filter => "(uid=$login)",
);
$result->code && die $result->error;
if ($result->count != 1) { printf("Erreur, ce mail n'existe pas...\n"); exit;
} else {
my @entries = $result->entries;
$uid = $entries[0]->get_value("uid");
$uidn = $entries[0]->dn();
}
print "Compte " . $uid . " trouvé\n";
my $actiondn = $uidn;
print "Entrez le nouveau mot de passe (vide pour aleatoire) : ";
ReadMode('noecho');
my $pass = ReadLine(0);
chomp $pass;
ReadMode('normal');
printf("\n");
# Generation aleatoire
if($pass eq "") {
$pass = `apg -n1 -E oOlL10\&\\\/`;
chomp $pass;
print "Mot de passe pseudo-aleatoire genere : $pass\n";
}
# set SSHA1 LDAP passwd with http://www.taclug.org/documents/openldap_presentation.html
my $ctx = Digest::SHA1->new;
$ctx->add($pass);
$ctx->add('salt');
my $hashedPasswd = '{SSHA}' . encode_base64($ctx->digest . 'salt' ,'');
$ldap->modify( $actiondn, replace => { 'userPassword' => $hashedPasswd } );
print "Réinitialisation password $login OK\n";
open F, ">>$file";
print F ("$date [add.pl] Modification passwd sur le mail $login\n");
close F;
$ldap->unbind;
}
sub aadd()
{
printf("Entrez l'alias a creer : ");
my $alias = <STDIN>;
chomp $alias;
# TODO : voir si l'alias est correct...
my ($login,$domain) = split(/@/,$alias);
my $ldap = Net::LDAP->new($host) or die "$@";
my $mesg = $ldap->bind($binddn,password => $password, version => 3);
# Voir si le domaine existe
my $result = $ldap->search(
base => $dn,
filter => "(cn=$domain)",
attrs => "cn"
);
$result->code && die $result->error;
if ($result->count != 1) { printf("Erreur, ce domaine n'existe pas...\n"); exit;}
our $edn = "cn=$domain," . $dn;
# Voir si l'alias existe deja
$result = $ldap->search(
base => $edn,
filter => "(cn=$login)",
attrs => "mail"
);
$result->code && die $result->error;
if ($result->entries) { printf("Erreur, cet alias existe deja...\n"); exit; }
printf("Entrez vers ou l'alias pointe : ");
my $drop = <STDIN>;
chomp $drop;
$result = $ldap->add( 'cn='. $login .','. $edn ,
attr => [
'mailacceptinggeneralid' => $alias,
'maildrop' => $drop,
'objectclass' => ['mailAlias'],
'isActive' => 'TRUE'
]
) or die "heh : $!";
$mesg->code && die $mesg->error;
$ldap->unbind;
printf("Ajout OK\n");
open F, ">>$file";
print F ("$date [add.pl] Ajout alias $alias\n");
close F;
}
# main() : options possibles
my %options=();
my $opt_string = 'hud';
my $opt_string = 'hudpa';
getopts("$opt_string",\%options);
&usage() if $options{h};
&add() if $options{u};
&gadd() if $options{d};
if ($options{h}) { &usage; }
elsif ($options{u}) { &add; }
elsif ($options{d}) { &gadd; }
elsif ($options{p}) { &passwd; }
elsif ($options{a}) { &aadd; }
else { &usage; }