Wizard-LDAP
view release on metacpan or search on metacpan
ldapAdmin.PL view on Meta::CPAN
############################################################################
#
# Name: LdapConnect
#
# Purpose: Connect to the LDAP server
#
# Inputs: $prefs - LDAP wizard prefs
#
# Returns: Net::LDAP object; dies in case of problems
#
############################################################################
sub LdapConnect {
my $prefs = shift;
my $server = $prefs->{'ldap-prefs-serverip'};
my $port = $prefs->{'ldap-prefs-serverport'} || 0;
my $ldap = Net::LDAP->new($server, 'port' => $port)
or die "Failed to connect to LDAP server $server"
. ($port ? ":$port" : "") . ": $!";
my $adminDN = $prefs->{'ldap-prefs-adminDN'};
my $adminPassword = $prefs->{'ldap-prefs-adminPassword'};
$ldap->bind('dn' => $adminDN, 'password' => $adminPassword)
or die "Failed to bind as $adminDN: $!";
$ldap;
}
############################################################################
#
# Name: AddUser
#
# Purpose: Add a new user
#
# Inputs: $prefs - LDAP wizard prefs
# $user - User being added
#
# Returns: Nothing; exits in case of problems
#
############################################################################
sub AddUser {
my($options, $prefs, $user) = @_;
my $uidnumber = $options->{'uidnumber'};
die "Invalid UID number: $uidnumber" unless $uidnumber =~ /^(\d+)$/;
my $gidnumber = $options->{'gidnumber'};
die "Invalid GID number: $gidnumber" unless $gidnumber =~ /^(\d+)$/;
my $homedir = $options->{'homedir'};
if (-d $homedir) {
print STDERR "A directory $homedir already exists. Please decide\n";
print STDERR "manually, what to do.\n";
return;
}
print "Making directory $homedir\n" if $verbose;
require File::Path;
File::Path::mkpath([$homedir], 0, 0755)
or die "Failed to create directory $homedir: $!";
print "Making directory $homedir owned by $uidnumber.$gidnumber"
if $verbose;
system "chown", "-R", "$uidnumber.$gidnumber", $homedir unless $debug;
}
############################################################################
#
# Name: ItemList
#
# Purpose: Read a list of items from the LDAP server
#
# Inputs: $prefs - LDAP wizard prefs
# $base - Base DN
# $filter - Filter string
#
# Returns: Array of items, aborts in case of trouble
#
############################################################################
sub ItemList {
my($prefs, $base, $filter, $ldap) = @_;
$ldap ||= LdapConnect($prefs);
my $msg = $ldap->search('base' => $base, 'filter' => $filter,
'scope' => 1);
die sprintf("Error while searching: code=%s, error=%s",
$msg->code(), $msg->error())
if $msg->code() and $msg->code() ne 32;
($ldap, $msg->entries());
}
############################################################################
#
# Name: MakeFile
#
# Purpose: Generate a config file
#
# Inputs: $path - Path of the file being generated
# $ci - Comment introducer
# $here - Beginning and end of the automatically generated
# section
# $sec - Automatically generated section
# $template - Template file, in case the file needs to be
# generated from scratch
#
# Returns: Nothing, dies in case of trouble
#
############################################################################
sub MakeFile {
my($path, $ci, $here, $sec, $template) = @_;
my $fh = Symbol::gensym();
my $rfile = $path;
if (!-f $rfile) {
$rfile = $template or die "No template for creating file: $path";
}
print "Reading contents for $path from $rfile.\n" if $verbose;
open($fh, "<$rfile") or die "Failed to open $rfile: $!";
local $/ = undef;
my $contents = <$fh>;
die "Failed to read $rfile: $!" unless defined($contents);
close($fh);
( run in 0.571 second using v1.01-cache-2.11-cpan-5511b514fd6 )