#!/usr/bin/perl -w # Populate a LDAP base for Samba-LDAP usage # # This code was developped by IDEALX (http://IDEALX.org/) and # contributors (their names can be found in the CONTRIBUTORS file). # # Copyright (C) 2001-2002 IDEALX # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, # USA. # Purpose : # . Create an initial LDAP database suitable for Samba 2.2 # . For lazy people, replace ldapadd (with only an ldif parameter) use strict; use FindBin; use FindBin qw($RealBin); use lib "$RealBin/"; use smbldap_tools; use smbldap_conf; use Getopt::Std; use Net::LDAP::LDIF; use vars qw(%oc); # objectclass of the suffix %oc = ( "ou" => "organizationalUnit", "o" => "organization", "dc" => "dcObject", ); my %Options; my $ok = getopts('a:b:?', \%Options); if ( (!$ok) || ($Options{'?'}) ) { print "Usage: $0 [-ab?] [ldif]\n"; print " -a administrator login name (default: Administrator)\n"; print " -b guest login name (default: nobody)\n"; print " -? show this help message\n"; print " ldif file to add to ldap (default: suffix, Groups,"; print " Users, Computers and builtin users )\n"; exit (1); } my $_ldifName; my $tmp_ldif_file="/tmp/$$.ldif"; if (@ARGV >= 1) { $_ldifName = $ARGV[0]; } my $adminName = $Options{'a'}; if (!defined($adminName)) { $adminName = "Administrator"; } my $guestName = $Options{'b'}; if (!defined($guestName)) { $guestName = "nobody"; } if (!defined($_ldifName)) { my $attr; my $val; my $objcl; print "Using builtin directory structure\n"; if ($suffix =~ m/([^=]+)=([^,]+)/) { $attr = $1; $val = $2; $objcl = $oc{$attr} if (exists $oc{$attr}); if (!defined($objcl)) { $objcl = "myhardcodedobjectclass"; } } else { die "can't extract first attr and value from suffix $suffix"; } #print "$attr=$val\n"; my ($organisation,$ext) = ($suffix =~ m/dc=(\w+),dc=(\w+)$/); #my $FILE="|cat"; my $FILE=$tmp_ldif_file; open (FILE, ">$FILE") || die "Can't open file $FILE: $!\n"; print FILE <new($tmp_ldif_file, "r", onerror => 'undef' ); while( not $ldif->eof() ) { my $entry = $ldif->read_entry(); if ( $ldif->error() ) { print "Error msg: ",$ldif->error(),"\n"; print "Error lines:\n",$ldif->error_lines(),"\n"; } else { my $dn = $entry->dn; print "adding new entry: $dn\n"; my $result=$ldap_master->add($entry); $result->code && warn "failed to add entry: ", $result->error ; } } $ldap_master->unbind; system "rm -f $tmp_ldif_file"; exit(0); ######################################## =head1 NAME smbldap-populate.pl - Populate your LDAP database =head1 SYNOPSIS smbldap-populate.pl [ldif-file] =head1 DESCRIPTION The smbldap-populate.pl command helps to populate an LDAP server by adding the necessary entries : base suffix (doesn't abort if already there), organizational units for users, groups and computers, builtin users : Administrator and guest, builtin groups (though posixAccount only, no SambaTNG support). -a name Your local administrator login name (default: Administrator) -b name Your local guest login name (default: nobody) If you give an extra parameter, it is assumed to be the ldif file to use instead of the builtin one. Options -a and -b will be ignored. =head1 FILES /usr/lib/perl5/site-perl/smbldap_conf.pm : Global parameters. =head1 SEE ALSO smp(1) =cut #' # - The End