diff options
Diffstat (limited to 'ldap_wizard')
-rw-r--r-- | ldap_wizard/ldapdef.pm | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/ldap_wizard/ldapdef.pm b/ldap_wizard/ldapdef.pm new file mode 100644 index 00000000..d538cc7c --- /dev/null +++ b/ldap_wizard/ldapdef.pm @@ -0,0 +1,182 @@ +package ldapdef; + +use strict; +use Net::LDAP; +use Net::LDAP::Util qw(ldap_error_text); + +use lib qw(/usr/lib/libDrakX); +use ugtk2; +use common; +use standalone; +use MDK::Wizard::Varspaceval; +use MDK::Wizard::Wizcommon; +use Expect; + +require Exporter; + +use vars qw(@ISA @EXPORT %cfg %cfgfile $congfile $msg $attrs %ldap $ldap); +@ISA=qw(Exporter); +@EXPORT=qw( %cfg %cfgfile $congfile load_config ldap_connect root_bind $msg anonymous_bind ldap_search get_dn $attrs get_dse %ldap add_user); + +require Exporter; + + +my $o = { + name => N("Add POSIX account"), + var => { + defou => 'ou=Users', + srv => '', + dom => 'mandrakesoft.com', + suffix => '', + rootdn => '', + rootpass => '', + rootpass2 => '', + cn => '', + sn => '', + uid => '', + uidpass => '', + lshell => '/bin/bash', + home => '/home/', + uidnb => '1004', + gidnb => '1004', + container => 'container', + objectclass => 'top,account,posixaccount', + shadowmax => '99999', + shadowmin => '-1', + plop => '', + tmp => '', + nom => '', + prenom => '', + }, + needed_rpm => [ 'squid' ], + defaultimage => "/usr/share/wizards/proxy_wizard/images/proxy.png" + }; + + + + + + + + + + + + + +my $ldap_suffix=join(',dc=', split(/\./, `hostname -f`)); +$ldap_suffix =~ s/[^,]*,//; +my $conf_file = "/etc/sysconfig/ldapconf"; + +##### Read conf file is exist + +my $hostname = `hostname`; +$o->{var}{srv} = $hostname; + +if (-f $conf_file) { + + my %conf = getVarsFromSh($conf_file); + $o->{var}{suffix} = $conf{suffix}; + $o->{var}{rootdn} = $conf{rootdn}; + $o->{var}{rootpass} = $conf{rootpass}; + $o->{var}{srv} = $conf{srv}; + $o->{var}{defou} = $conf{users}; + +} else { + + my $hostname = `hostname`; + $o->{var}{srv} = $hostname; + $o->{var}{suffix} = $ldap_suffix; + +} + +# Connect to Ldap server +sub ldap_connect { + + my $cnx= Net::LDAP->new($o->{var}{srv}) or die "Impossible de se connecter au server"; +} + +# bind root +sub root_bind{ + my ($ldap) = @_; + my $mesg=$ldap->bind(dn =>"cn=".$o->{var}{rootdn}.",".$o->{var}{suffix},password =>$o->{var}{rootpass}); + print ldap_error_text($mesg->code); + return $mesg->code; +} + + +sub anonymous_bind{ + my ($ds) = @_; + my $mesg=$ds->bind; + return $mesg->code; +} + +sub ldap_search{ + my ($ds,$filter,$basedn) = @_; + my $attrs =['objectClass']; + my $mesg = $ds->search( + base => $basedn, + filter => $filter, + scope => "sub", + attrs => $attrs + ); + my $href = $mesg->as_struct; + print("Résultats de la recherchei\n"); + print "$href"; +} + +sub get_dn{ + my ($ds,$filter,$basedn,$attrs) = @_; + my $mesg = $ds->search( + base => $basedn, + filter => $filter, + scope => "sub", + #attrs => $attrs + ); + #my $entry = ""; + #foreach $entry ($mesg->entries) { + #print "show DN ".$entry->dn."\n"; + #} + return $mesg +} + +sub get_dse { + + my $ldap = ldap_connect(); + my $result = get_dn($ldap,"(objectclass=organization)","$cfg{'base'}"); + my @arrayOfDNs = $result->entries; + #my %ldap = (); + foreach my $dn_value (@arrayOfDNs) + { + my $orga = $dn_value->dn; + $ldap{'orga'} = $orga; + } + return %ldap; +} + +sub add_user { + my ($u) = @_; + my $ldap = ldap_connect(); + root_bind($ldap); + my $result = $ldap->add( + "uid=$u->{var}{uid},$u->{var}{defou},$u->{var}{suffix}", + attr => [ + objectclass => ["top","posixAccount","inetOrgPerson","shadowAccount"], + sn => $u->{var}{sn}, + uid => $u->{var}{uid}, + cn => $u->{var}{cn}, + userPassword => $u->{var}{uidpass}, + loginShell => $u->{var}{lshell}, + uidNumber => $u->{var}{uidnb}, + gidNumber => $u->{var}{gidnb}, + homeDirectory => $u->{var}{home}, + shadowMin => '-1', + shadowMax => '999999', + shadowWarning => '7', + shadowInactive => '-1', + shadowExpire => '-1', + ] + ); + #print ldap_error_text($result->code); + return $result->code; +} |