A kind of perl script that i use to change the user password from an sql database, but It's easy with perl to parse a csv file.

use Net::LDAP;
use DBI();
use Encode;
use MIME::Base64;
use SHA;


my $dbh = DBI->connect("DBI:mysql:database=user;host=localhost","admin", "password",{RaiseError => 1});

 $ldup = Net::LDAP->new( 'ldap.server.com ' ) or die "$@";
 $masg = $ldup->bind ;  # an anonymous bind
 $masg = $ldup->search( # perform a search
                                                base   => "ou=People,dc=test,dc=com",
                                                scope  => 'sub',
                                                filter => "(uid=*)",
                                                attrs => ['uid']
                                                );

 $masg->code && die $masg->error;

 foreach  $entry ($masg->entries)
 {
         $uid="NULL";
         $dn=$entry->dn();
         foreach  $attr ($entry->attributes)
                {
                if($attr eq uid)
                        {
                        $uid=$entry->get_value($attr);
                #       print "\n".$uid;
                        }
                }
                $az=$dbh->prepare("select * from passwd where nom = \"$uid\" ORDER BY stamptime DESC");
                $az->execute;
                $passwd = $az->fetchrow_hashref;
                if ($passwd->{passwd}) {
                        $sha = new SHA;
                        $salt    = (shift, pack ("H*", shift));
                        $label = "{SSHA}";
                        $hash = $sha->hash ($passwd->{passwd} . $salt);
                        $hashpass = $label. encode_base64 ($hash . $salt, "");
                        $ldop = Net::LDAP->new( ' ldap.server.com' );
                        $misg = $ldop->bind( 'cn=directory manager',password => 'password');
                        $misg = $ldop->modify( $dn, delete => [userPassword] );
                        $misg = $ldop->modify( $dn, add => { userPassword => $hashpass } );
                        undef $hashpass;
                        $misg->code && warn "failed to add entry: ", $misg->error ;
                        $misg = $ldop->unbind;
                        print $uid.":".$passwd->{passwd}."\n";
                }
 }

$mesg = $ldup->unbind;   # take down session

Fabrice

2007/12/4, Glenn <glenn@mail.txwes.edu>:
Howdy, Guys - I need a shell script that will read a file of user IDs and
passwords and enter the passwords into Fedora Directory.  The users are
already in FD; we just need to change all their passwords at once.  The file
will be formatted so the user ID is in column one and the password is in
column two.  We have about 8,000 users.  Any help appreciated.  Thanks.   -
Glenn.

--
Fedora-directory-users mailing list
Fedora-directory-users@redhat.com
https://www.redhat.com/mailman/listinfo/fedora-directory-users