Hello perl-LDAP users,

I'm trying to migrate our NIS data from CentOS Linux
to Microsoft's SFU for Active Directory and
while the script importing NIS users by modifying
the corresponding AD users works fine,
I have troubles adding new groups to the
OU=NIS Groups that I've created manually:

use constant ROOTDN   => 'OU=NIS Groups,DC=internal,DC=mycompany,DC=com';
.......
while (my ($key, $value) = each %passwd) {
        print "$key -> $value\n";

        my ($Name, $GidNumber, $PosixMember) = (split ':', $value)[0, 2, 3];

        print "Name: $Name\n";
        print "GidNumber: $GidNumber\n";
        print "PosixMember: $PosixMember\n" if defined $PosixMember;

        my $dn = "cn=$Name," . ROOTDN;
        print "dn: $dn\n\n";

        my $result = $ldap->add($dn, attrs => [
                msSFU30GidNumber => $GidNumber,
                msSFU30Name => $Name,
                msSFU30NisDomain => 'internal',
                #msSFU30PosixMember => $PosixMember,
        ] );

        $result->code && print STDERR 'Failed to add group: ',
$result->error, "\n";
}

This gives me the error:

calibrat -> calibrat:*:5522:herman,hufeis,konop
Name: calibrat
GidNumber: 5522
PosixMember: herman,hufeis,konop
dn: cn=calibrat,OU=NIS Groups,DC=internal,DC=mycompany,DC=com

Failed to add group: 0000207B: UpdErr: DSID-03050FB5, problem 6002
(OBJ_CLASS_VIOLATION), data 0

Do you have any advice for me?

Regards
Alex

PS: Here is my NIS-users importing script that works:

#!/usr/bin/perl -wT

use strict;
use POSIX qw(strftime);
use Net::NIS;
use Net::LDAPS;

use constant ROOTDN   => 'OU=Imported,OU=User
Accounts,DC=internal,DC=mycompany,DC=com';
use constant DOMAIN   => 'internal.mycompany.com';
use constant SERVER   => [ map { "ablwdc0$_." . DOMAIN } 1..4 ];
use constant ADMIN    => 'XXXX';
use constant ADMPW    => 'XXXX';

my $rot13;
($rot13 = ADMPW) =~ y/A-Za-z/N-ZA-Mn-za-m/;

my $ldap = Net::LDAPS->new(SERVER) or
        die('Can not connect to LDAP server');
$ldap->bind(ADMIN . '@' . DOMAIN, password => $rot13) or
        die('Can not bind to LDAP server as ' . ADMIN);

tie my %passwd, 'Net::NIS', 'passwd.byname' or
        die "Cannot tie to passwd YP map: $yperr\n";

while (my ($key, $value) = each %passwd) {
        print "$key -> $value\n";
        my ($Name, $Password, $UidNumber, $LoginShell, $HomeDirectory,
$GidNumber) = (split ':', $value)[0, 1, 2, 6, 5, 3];

        print "Name: $Name\n";
        print "Password: $Password\n";
        print "UidNumber: $UidNumber\n";
        print "LoginShell: $LoginShell\n";
        print "HomeDirectory: $HomeDirectory\n";
        print "GidNumber: $GidNumber\n\n";

        my $dn = "cn=$Name," . ROOTDN;
        print "dn: $dn\n\n";

        my $result = $ldap->modify($dn, replace => {
                msSFU30Name => $Name,
                msSFU30Password => $Password,
                msSFU30NisDomain => 'internal',
                msSFU30UidNumber => $UidNumber,
                msSFU30LoginShell => $LoginShell,
                msSFU30HomeDirectory => $HomeDirectory,
                msSFU30GidNumber => $GidNumber,
        } );

        $result->code && print STDERR 'Failed to modify user: ',
$result->error, "\n";
}

$ldap->unbind();


And here is my NIS-groups script that fails:

#!/usr/bin/perl -wT

# import NIS group data into SFU
# afarber, 2008-03-12

use strict;
use POSIX qw(strftime);
use Net::NIS;
use Net::LDAPS;

use constant ROOTDN   => 'OU=NIS Groups,DC=internal,DC=mycompany,DC=com';
use constant DOMAIN   => 'internal.mycompany.com';
use constant SERVER   => [ map { "ablwdc0$_." . DOMAIN } 1..4 ];
use constant ADMIN    => 'XXXXX';
use constant ADMPW    => 'XXXXX';

my $rot13;
($rot13 = ADMPW) =~ y/A-Za-z/N-ZA-Mn-za-m/;

my $ldap = Net::LDAPS->new(SERVER) or
        die('Can not connect to LDAP server');
$ldap->bind(ADMIN . '@' . DOMAIN, password => $rot13) or
        die('Can not bind to LDAP server as ' . ADMIN);

tie my %passwd, 'Net::NIS', 'group.byname' or
        die "Cannot tie to group YP map: $yperr\n";

while (my ($key, $value) = each %passwd) {
        print "$key -> $value\n";

        my ($Name, $GidNumber, $PosixMember) = (split ':', $value)[0, 2, 3];

        print "Name: $Name\n";
        print "GidNumber: $GidNumber\n";
        print "PosixMember: $PosixMember\n" if defined $PosixMember;

        my $dn = "cn=$Name," . ROOTDN;
        print "dn: $dn\n\n";

#next;

        my $result = $ldap->add($dn, attrs => [
                msSFU30GidNumber => $GidNumber,
                msSFU30Name => $Name,
                msSFU30NisDomain => 'internal',
                #msSFU30PosixMember => $PosixMember,
        ] );

        $result->code && print STDERR 'Failed to add group: ',
$result->error, "\n";
}

$ldap->unbind();

Reply via email to