#!/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 "

". $errormsg ."

\n"; print $text{'error'}.": \n"; 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 < Legge til bruker(e)

Legge til bruker(e)






Felles passord for alle i klasse? Nei: Ja: Passord:



EOF for $i(1..$c){ print ""; if($i < $c){ print ""; print ""; print ""; print ""; print ""; } else{ print ""; print ""; print < EOF print ""; print ""; print ""; } $i++; } print < ;
Kull Type Fornavn: Etternavn Diverse
"; print $in{"kull$i"}; print ""; print $in{"rolle$i"}; print "
"; foreach $entry (@groups){ print ""; } print ""; print "
RootPassword:





Legg til fra fil:
EOF #print %in; } #når man trykker opprettbrukere... if("$in{'fler'}" eq "Opprettbrukere") { $i=1; $c--; for $i(1..$c){ #skaffe variabler $cn = $in{"surname$i"} . ", " . $in{"firstname$i"}; $gidNumber = &ldap_get_gidNumber($in{"kull$i"}, $config{'basedn'}); $uidNumber = &ldap_get_max_uid($config{'basedn'}); $gidNumber; $uidNumber++; $rolle = $in{"rolle$i"}; print $rolle; &make_uid(); $homedir = $config{'homeprefix'}. "/". $in{"kull$i"} . "/" . $uid; $maildir = $config{'mailprefix'}. "/". $in{"kull$i"} . "/" . $uid; print $uid; $result = &ldap_add_user(latin1($cn)->utf8,latin1($uid)->utf8,$userpw,$uidNumber, $gidNumber,$in{'rootpw'},$config{'rootdn'}, $config{'basedn'},latin1($rolle)->utf8,$homedir,$maildir); if ($result->code()) { print_ldap_error(text("addfailed", $uid), $result); } $result = &min_create_dir($homedir, $uidNumber, $uidNumber); if ($result) { print "

". text("addHomedirSuccess",$homedir) ."

\n"; } else { print "

". text("addHomedirFailed",$homedir) ."

\n"; } } $i++; $c++; } if("$in{'fler'}" eq "fil"){ print %in; } print <


Reset EOF