support ldap to samba4
Salut,
J'ai réussi à faire marcher l'authentification ldap vers samba4 en modifiant légèrement lib/Lufi.pm En gros il manquait juste
-
starttls (qui est par default activé dans samba4 depuis quelques temps), pour ça il faut au minimum un certificat et que faire si le certificat n'est pas valide (donc deux valeurs a ajouter à lufi.conf)
-
d'autre part, les nom des utilisateurs dans samba sont identifiés par les entrée cn= et non pas uid=
Bon après je suppose que plutôt que de hacker ldap il faudrait plutôt une implementation a coté avec un switch dans lufi.conf si on veut du ldap Samba plutôt que du ldap classique...
index a36d0dc..601960f 100644
--- a/lib/Lufi.pm
+++ b/lib/Lufi.pm
@@ -75,7 +75,11 @@ sub startup {
my ($c, $username, $password, $extradata) = @_;
my $ldap = Net::LDAP->new($c->config->{ldap}->{uri});
- my $mesg = $ldap->bind($c->config->{ldap}->{bind_user}.$c->config->{ldap}->{bind_dn},
+ my $mesg = $ldap->start_tls(
+ verify => 'optional',
+ clientcert => '/etc/ssl/certs/ca-bundle.pem'
+ );
+ $mesg = $ldap->bind($c->config->{ldap}->{bind_user}.$c->config->{ldap}->{bind_dn},
password => $c->config->{ldap}->{bind_pwd}
);
@@ -83,7 +87,7 @@ sub startup {
$mesg = $ldap->search(
base => $c->config->{ldap}->{user_tree},
- filter => "(&(uid=$username)".$c->config->{ldap}->{user_filter}.")"
+ filter => "(&(cn=$username)".$c->config->{ldap}->{user_filter}.")"
);
if ($mesg->code) {
@@ -92,7 +96,7 @@ sub startup {
}
# Now we know that the user exists
- $mesg = $ldap->bind('uid='.$username.$c->config->{ldap}->{bind_dn},
+ $mesg = $ldap->bind('cn='.$username.$c->config->{ldap}->{bind_dn},
password => $password
);