On Mon, Sep 17, 2007 at 11:47:13AM -0300, Artur Baruchi wrote:

> I'm installing the LDAP, and I would like to know if exist a tool or a
> script to migrate my users (from the shadow file and passwd file) to
> my ldap database.
> 
> If it exists, can someone send me more information about it.

Your LDAP server software might include one; check with your vendor.
Some of the proprietary packages offer a bunch of integrated migration
utilities.  Otherwise, it's very easy to write something yourself -
here's a simple script for migrating traditional passwd / yppasswd
output to LDIF (import with ldapadd(1)).  You could easily adjust it
to read the shadow file as well.  Note that some LDAP servers
(iPlanet/Sun DS is one of them) have some additional account
management features that you might want to take a look at if you're
actually using the other fields in /etc/shadow.

#! /usr/bin/perl

use warnings;
use strict;

my $SUFFIX = "dc=example,dc=com";

if (@ARGV < 1) {
        die("usage: $0 passwd-file\n");
}

if (!open(PWD, "<$ARGV[0]")) {
        die("Coudln't open '$ARGV[0]' for reading: $!\n");
}

while (<PWD>) {
        chomp;
        my ($username, $passwd, $uid, $gid, $gecos, $dir, $shell) = split ':';
        next if ($uid < 100);

        print "dn: uid=$username,ou=People,$SUFFIX\n";
        print "objectClass: top\n";
        print "objectClass: posixAccount\n";
        print "objectClass: shadowAccount\n";
        print "objectClass: person\n";
        print "objectClass: organizationalPerson\n";
        print "objectClass: inetOrgPerson\n";
        print "uid: $username\n";

        $passwd = "*LK*" if ($passwd eq "");

        print "userPassword: {CRYPT}$passwd\n";
        print "uidNumber: $uid\n";
        print "gidNumber: $gid\n";
        print "gecos: $gecos\n";
        print "homeDirectory: $dir\n";
        print "loginShell: $shell\n";
        print "cn: $username\n";
        print "cn: $gecos\n";

        my @names = split /\s+/, $gecos;
        my $sn = [EMAIL PROTECTED] - 1];
        my $gn = $names[0];

        if (@names > 1) {
                if (@names > 2) {
                        print "cn: $gn $sn\n";
                }
                print "givenName: " . $names[0] . "\n";
                print "sn: " . [EMAIL PROTECTED] - 1] . "\n";
        }

        print "shadowlastchange: -1\n";
        print "shadowmin: -1\n";
        print "shadowmax: -1\n";
        print "shadowwarning: -1\n";
        print "shadowinactive: -1\n";
        print "shadowexpire: -1\n";
        print "shadowflag: -1\n";
        print "description: $gecos\n\n";
}

-- 
Keith M Wesolowski              "Sir, we're surrounded!" 
FishWorks                       "Excellent; we can attack in any direction!" 
_______________________________________________
opensolaris-help mailing list
[email protected]

Reply via email to