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 )