package fcldap; use strict; use Net::LDAP; use Net::LDAP::LDIF; use MDK::Common; use vars qw(@ISA @EXPORT); use Exporter; @ISA = qw(Exporter); @EXPORT = qw(cnx_ldap_ano cnx_ldap_user find_user_posix add_user_posix create_rootdse create_rootdse_file add_ou tutu ); sub cnx_ldap_ano { my ($u) = @_; my $ldap = Net::LDAP->new($u->{var}{srv}) or die $@; my $mesg = $ldap->bind; return ($ldap); } sub cnx_ldap_user { my ($u) = @_; print "cnx_ldap_user not connect\n"; my $ldap = Net::LDAP->new($u->{var}{srv}) or die $@; print "cnx_ldap_user \n"; print "$u->{var}{rootdn} \n"; print "$u->{var}{rootdse} \n"; print "$u->{var}{rootpass} \n"; my $mesg = $ldap->bind( "$u->{var}{rootdn},$u->{var}{rootdse}", password => "$u->{var}{rootpass}", ); print "$ldap \n"; return ($ldap); } sub create_rootdse_file { my ($u) = @_; output('/tmp/rootdse.ldif', <{var}{rootdse} objectclass: dcObject objectclass: organization o: Example Company dc: $u->{var}{dom} dn: cn=$u->{var}{rootdn},$u->{var}{rootdse} objectclass: organizationalRole cn: $u->{var}{rootdn} dn: ou=$u->{var}{defou},$u->{var}{rootdse} objectClass: top objectClass: organizationalUnit ou: $u->{var}{defou} description: $u->{var}{defou} EOF } sub create_rootdse { my ($u) = @_; create_rootdse_file($u); print "$u->{var}{rootdse}\n"; print "$u->{var}{rootdn}\n"; print "$u->{var}{rootpass}\n"; print "$u->{var}{defou}\n"; print "$u->{var}{dom}\n"; my $mesg = system("ldapadd -x -D 'cn=$u->{var}{rootdn},$u->{var}{rootdse}' -f /tmp/rootdse.ldif -w $u->{var}{rootpass}"); return($mesg); } sub find_user_posix { my ($u) = @_; my $dn; my $ldap = cnx_ldap_ano('loki'); my $mesg = $ldap->search (base => "$u->{var}{basedn}", scope => $u->{var}{scope}, filter => "(&(objectclass=posixAccount)(uid=$u->{var}{uid})", ); foreach my $entry ($mesg->all_entries) { my $dn = $entry->dn; print "$dn \n"; } } sub add_ou { my ($u) = @_; print "add_ou \n"; my $ldap = cnx_ldap_user($u); print "add_ou \n"; my $result = $ldap->add( "ou=$u->{var}{defou},$u->{var}{rootdse} ", attr => [ objectclass => ["top","organizationalUnit"], ou => $u->{var}{defou}, description => $u->{var}{defou}, ] ); print "Create Default OU=$u->{var}{defou} \n"; $result->code && warn "failed to add entry: ", $result->error ; my $mesg = $ldap->unbind; # take down session } sub add_user_posix { my ($u) = @_; my $uid = $u->{var}{uid}; my $ldap=Net::LDAP->new('127.0.0.1') or die "$@"; my $mesg = $ldap->bind( "cn=$u->{var}{rootdn},$u->{var}{rootdse}", password => "$u->{var}{rootpass}" ); my $shell = "/bin/zsh"; my $uid = "vincent" ; #my $ldap = cnx_ldap_user('loki','manager','secret'); my $result = $ldap->add( "uid=$uid,ou=$u->{var}{defou},$u->{var}{rootdse}", attr => [ objectClass => ["top","account","posixAccount","shadowAccount"], uid => $uid, cn => 'toto', userPassword => 'test', userPassword => 'pass', loginShell => '/bin/bash', #loginShell => $u->{var}{lshell}, uidNumber => '501', gidNumber => '501', homeDirectory => '/home/toto', shadowMin => "-1", shadowMax => "999999", shadowWarning => "7", shadowInactive => "-1", shadowExpire => "-1", ] ); $result->code && warn "failed to add entry: ", $result->error ; $mesg = $ldap->unbind; # take down session } 1;