#!/usr/bin/perl --
#
# Configuration script for Debian's umich-ldapd package.
# Used after installation to configure the machine as either a main LDAP
# server or a replicated LDAP server, and can be run at any later time.
#

# Ensure umask is correct
umask 022;

# Turn on autoflush 
$|=1;

# Setting this to something other than /etc may be useful for testing
$etc='/etc/umich-ldap';

# Which major configuration ?
print "
==============================================================================
You must choose one of the options below:

 (1) This machine is acting as a standalone LDAP server.

 (2) This machine is acting as a LDAP server and its contents are replicated
     to other secondary LDAP servers.

 (3) This machine is acting as a secondary LDAP server by replicating
     information from another LDAP server.

Select a number from 1 to 3, from the list above and press return: ";

$configtype = <STDIN>;

if ($configtype == 2) {
    print "\nWhat is the name of the host that this server will replication to?: ";
    $replicationhost = <STDIN>;
    chop $replicationhost;

    open(N,">$etc/server-type.conf") || die "Error creating $etc/server-type.conf: $!\n";
    print(N "primary-with-replication") || die "Error writing $etc/server-type.conf: $!\n";
    close(N) || die "Error closing $etc/server-type.conf: $!\n";

    # Make sure the slapd.conf is not world readable as it contains a password.
    umask 026;
    open(C,">$etc/slapd.conf") || die "Error creating $etc/slapd.conf: $!\n";
    print(C "
# slapd configuration when running as primary with replication.

include		/etc/umich-ldap/slapd.at.conf
include		/etc/umich-ldap/slapd.oc.conf
schemacheck	off

#######################################################################
# ldbm database definitions
#######################################################################

database	ldbm
suffix		\"o=University of Michigan, c=US\"
directory	/var/lib/umich-ldapd/umich
rootdn		\"cn=root, o=University of Michigan, c=US\"
rootpw		secret

replogfile      /var/lib/umich-ldapd/slapd.replog

replica         host=$replicationhost
                binddn=\"cn=Manager, o=University of Michigan, c=US\"
                bindmethod=simple
                credentials=secret

# End of slapd configuration file
") || die "Error writing $etc/slapd.conf: $!\n";
    close(C) || die "Error closing $etc/slapd.conf: $!\n";
}
elsif ($configtype == 3) {
    open(N,">$etc/server-type.conf") || die "Error creating $etc/server-type.conf: $!\n";
    print(N "secondary") || die "Error writing $etc/server-type.conf: $!\n";
    close(N) || die "Error closing $etc/server-type.conf: $!\n";

    # Make sure the slapd.conf is not world readable as it contains a password.
    umask 026;
    open(C,">$etc/slapd.conf") || die "Error creating $etc/slapd.conf: $!\n";
    print(C "
# slapd configuration when running as secondary with replication.

include		/etc/umich-ldap/slapd.at.conf
include		/etc/umich-ldap/slapd.oc.conf
schemacheck	off

#######################################################################
# ldbm database definitions
#######################################################################

database	ldbm
suffix		\"o=University of Michigan, c=US\"
directory	/var/lib/umich-ldapd/replication
rootdn		\"cn=root, o=University of Michigan, c=US\"
rootpw		secret

# End of slapd configuration file
") || die "Error writing $etc/slapd.conf: $!\n";
    close(C) || die "Error closing $etc/slapd.conf: $!\n";
    exec ("mkdir -p /var/lib/umich-ldapd/replication");
}
else {
    open(N,">$etc/server-type.conf") || die "Error creating $etc/server-type.conf: $!\n";
    print(N "primary") || die "Error writing $etc/server-type.conf: $!\n";
    close(N) || die "Error closing $etc/server-type.conf: $!\n";

    # Make sure the slapd.conf is not world readable as it contains a password.
    umask 026;
    open(C,">$etc/slapd.conf") || die "Error creating $etc/slapd.conf: $!\n";
    print(C "
# Standalone slapd configuration.

include		/etc/umich-ldap/slapd.at.conf
include		/etc/umich-ldap/slapd.oc.conf
schemacheck	off

#######################################################################
# ldbm database definitions
#######################################################################

database	ldbm
suffix		\"o=University of Michigan, c=US\"
directory	/var/lib/umich-ldapd
rootdn		\"cn=root, o=University of Michigan, c=US\"
rootpw		secret

# End of slapd configuration file
") || die "Error writing $etc/slapd.conf: $!\n";
    close(C) || die "Error closing $etc/slapd.conf: $!\n";
}

print "
This system has been configured as a ";
if ($configtype == 2) {
    print("primary-with-replication");
}
elsif ($configtype == 3) {
    print("secondary");
}
else {
    print("primary");
}
print " LDAP server.

You may run umich-ldapdconfig anytime to change the configuration.

Restart umich-ldapd now? [Y/n]: ";

$response = <STDIN>;
chop $response;

if (($response eq "n") || ($response eq "N")) {
   exit 0;
}

exec ("/etc/init.d/umich-ldapd restart");

exit 0;
