#!/usr/bin/perl use Data::Dumper; use Unicode::String qw (utf8 latin1); require '/usr/share/webmin/web-lib.pl'; require "ldap-users.pl"; use vars qw(%text %config %in $tb $cb); @scriptdirs = qw(/etc/webmin/ldap-users /usr/share/webmin/ldap-users .); #sub make_uid(){ #$f = $in{"firstname$i"}; #$s = $in{"surname$i"}; #$id = substr($s, 0, 3) . substr($f, 0, 3) ; #$uid = lc("$id"); #if("$in{'fpass'}" eq "no"){ #$userpw = lc(substr($f, 0, 3) . substr($s, 0, 3)) ; #} #if("$in{'fpass'}" eq "yes"){ #$userpw = "$in{'kpwd'}"; #print $userpw; #} #} sub make_uid(){ $f = $in{"firstname$i"}; $s = $in{"surname$i"}; #If users with identical names append a number to $first_name_part $nr = 0; #Default uid consist of 3 last-3 first $letterCount_f = 3; $letterCount_s = 3; #If people have less than 3-letter names set number of letters if( $f < $letterCount_f ){ $lettercount = $f; } if( $s < $letterCount_s ){ $lettercount_s = $s; } $sure_name_part = substr($s, 0, $letterCount_s); $first_name_part = substr($f, 0, $letterCount_f) ; $uid = lc("$sure_name_part"."$first_name_part"); $entry = &ldap_get_user($config{'basedn'} , $uid); while ( defined $entry ){ if( $letterCount_s > $s ){ $nr++; $first_name_part = "$first_name_part"."$nr"; } elsif( $letterCount_s <= $s ){ $letterCount_s++; } $sure_name_part = substr($s, 0, $letterCount_s); $uid = lc("$sure_name_part"."$first_name_part"); $entry = &ldap_get_user($config{'basedn'} , $uid); } if("$in{'fpass'}" eq "no"){ $userpw = lc("$first_name_part"."$sure_name_part" ) ; } if("$in{'fpass'}" eq "yes"){ $userpw = "$in{'kpwd'}"; print $userpw; } } sub min_create_dir($$$){ my ($homedir, $uidNumber, $gidNumber) = @_; return undef unless $gidNumber; return run_script("createhomedir", $homedir, $uidNumber, $gidNumber); } sub run_script { my ($scriptname, @args) = @_; my $done = 0; my $retval = 1; print "
\n"; for my $scriptdir (@scriptdirs) { my $path = "$scriptdir/$scriptname"; if ( -x $path) { # from system(), 0 means success. invert before returning it. $retval = ! system($path, @args); $done = 1; last; } } if ( ! $done ) { print($text{'error'}.": Unable to find any executable ". "script $scriptname in ", join(" ", @scriptdirs), ".\n"); $retval = undef undef; } print "\n"; return $retval; } sub ldap_get_max_gid($){ ($basedn) = @_; $mesg = $ldap->search (base => "ou=Group,$basedn", filter => "objectClass=posixGroup" ); $maxval = 10000; foreach $entry ($mesg->all_entries()){ my $val = $entry->get_value('gidNumber'); $maxval = $val if ($val > $maxval); } return $maxval++; } sub ldap_get_max_uid($){ ($basedn) = @_; $mesg = $ldap->search (base => "ou=People,$basedn", filter => "objectClass=posixAccount" ); $maxval = 10000; foreach $entry ($mesg->all_entries()){ my $val = $entry->get_value('uidNumber'); $maxval = $val if ($val > $maxval); } return $maxval++; } sub ldap_get_gidNumber($$){ my ($gid, $basedn) = @_; my $mesg = $ldap->search (base => "ou=Group,$basedn", filter => "cn=$gid", attrs => "gidNumber" ); return "(not in ldap)" if (! $mesg->count()); my $entry = $mesg->entry(0); return $entry->get_value('gidNumber'); } sub print_ldap_error($$) { my ($errormsg, $result) = @_; print "
"; print Dumper($result->error()); print ""; } #main &init_config(); &header( $text{'title1'} ,"", undef, 1); &ReadParse(); &ldap_connect($config{'server'}, $config{'rootdn'}); @groups = &ldap_get_groups($config{'basedn'}); $c = $in{'counter'}; $c++; $i=1; print $c; #add user fields or after pressing add more users if("$in{'fler'}" eq "Legg til fler" || "$in{'fler'}" eq ""){ print <