[Kolab-devel] kolab_setup (part of Kolab bootstrap rewrite)

Bo Thorsen bo at sonofthor.dk
Tue Mar 23 12:08:37 CET 2004


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Tuesday 23 March 2004 10:42, Stephan Buys wrote:
> Hi all,
>
> Here is the script that will be used to generate kolab.bootstrap (you
> can refer to the bootstrap design doc for more information around the
> process).
>
> The reason I am releasing this to the list is that I want feedback with
> regards to the options as well as the default we have chosen.
>
> The highlights visible from this script is:
>
> Users goes to: cn=Users,base_dn
> Address book goes to: cn=Contacts,base_dn
> etc.
>
> We have specifically chosen Microsoft terminilogy to make it easy for
> people with little directory/Unix knowledge to pick up the exact
> meanings.

This sounds fishy to me. But I'll comment on specific issues if there are 
any.

In general, I don't like trying to hide the fact that people are changing 
systems. That obviously doesn't mean trying to specifically make it more 
challenging to change, but it's an annoyment if you're a unix fan 
already.

> Any feedback welcome!

> #!/kolab/bin/perl
> 
> # (c) 2004 Joon Radley <joon at radleys.co.za>
> # (c) 2003 Tassilo Erlewein <tassilo.erlewein at erfrakon.de>
> # (c) 2003 Martin Konold <martin.konold at erfrakon.de>
> # (c) 2003 Achim Frank <achim.frank at erfrakon.de>
> # This program is Free Software under the GNU General Public License 
(>=v2).
> # Read the file COPYING that comes with this packages for details.
> 
> # kolab_setup Version 0.9
> # 
> # 11 March 2004 <joon at radleys.co.za>
> #
> # The functionality of this script was orginaly include in the
> # kolab_bootstrap script. It has been moved out to seperate the
> # the collection of the bootstrap information from the bootstrap
> # process. This will allow other applicates to create the 
> # bootstrap information.
> #
> # The script is based on the orginal part of the kolab_bootstrap
> # file. :-)
> #
> # INPUT: None
> #
> # OUTPUT: /kolab/etc/kolab/kolab.bootstrap
> #
> # TODO: Remove the hard linking of file names. The location of the
> # kolab.bootstrap file should be determined dynamically. 
> 
> 
> use strict;
> use vars qw($opt_b);
> 
> use URI;
> use IO::File;
> use IO::Select;
> use File::Copy;
> use Getopt::Std;
> use Term::ReadKey;
> 
> #
> # function to generate random password
> #
> 
> srand;
> 
> sub random_password_generator
> {
>     my $pw_length = $_[0];
>     
>     my @pw_chars = ('a'..'z', 'A'..'Z', 0..9, '-', '_', '%', '#', '|');
>     
>     my $password = join '', map $pw_chars[rand @pw_chars], 0..
$pw_length;
> 
>     return $password;
> }
> 
> sub prompt_input
> {
>   my $prompt_string = $_[0];
>   my $default_value = $_[1];
>   
>   my $return_value = $default_value;
>   
>   print "$prompt_string [$default_value]:";
>   my $tmp = ReadLine;
>   chomp $tmp;
>   #(my $dummy, my $tmp) = split(/\:/, $tmp, 2);
>   if ($tmp)
>   {
>     $return_value = $tmp;
>   }
>   
>   return $return_value;
> }
> 
> #
> # Define and clear all the variables to use. For a definition of the
> # variables, please read the design documentation.
> #
> 
> my $hostname = "";
> my $email_domain = "";
> my $base_dn = "";
> my $user_dn = "";
> my $contact_dn = "";
> my $system_dn = "";
> my $kolab_dn = "";
> my $manager_pw ="";
> my $admin_dn = "";
> my $admin_pw = "";
> my $postmaster = "";
> my $abuse = "";
> my $user_cn = "Users";
> my $contact_cn = "Contacts";
> my $system_cn = "System";
> my $admin_cn = "Administrator";

... and I guess this one is the first. Oh well, at least it's a step up 
from the "manager" that is used nowhere else.

> my $kolab_cn = "Kolab Configuration";
> my $response = "N";
> 
> #
> # Print the welcome string
> #
> 
> print "\nKOLAB BOOTSTRAP SETUP\n\n";

Why the shouting?

> #
> # Assign the file name
> #
> 
> my $kolab_setup_file = "/kolab/etc/kolab/kolab.bootstrap";

Don't hardcode paths.

> #
> # Gather the hostname and email domain.
> #
> 
> print "Hostname:\n" .
>       "This is the fqdn (fully qualified domain name) of the Kolab 
server. \n" .
>       "It will be used in subsequent steps to auto-generate some of the 
fields.\n\n";
> 
> $hostname = prompt_input( "Please enter the hostname", $hostname );
> 
> if ( !$hostname )
> {
>   print "\nERROR: The hostname:$hostname cannot be empty.\n\n";
>   exit;
> }
> 
> # extract email domain from host name
> (my $dummy, my $email_domain) = split(/\./, $hostname, 2);
> if (!$email_domain)
> {
>   $email_domain = $hostname;
> }
> 
> print "\nE-Mail Domain:\n".
>       "This is the mail domain that Kolab will accept mail for. This 
will map \n".
>       "to the organizations' mail domain (or internal sub domains). You 
will \n".
>       "also need an accompanying MX record in DNS for mail to be 
delivered across \n".
>       "the internet.\n\n";
>       
> $email_domain = prompt_input( "Please enter your E-Mail domain" , 
$email_domain );
> 
> #
> # Generate default advanced values
> #
> 
> $manager_pw = random_password_generator(8);
> $admin_pw = random_password_generator(8);
> $postmaster = "administrator@".$email_domain;
> $abuse = $postmaster;
> 
> #
> # Generate Output Values
> #
> 
> foreach my $dc ((split(/\./,$hostname)))
> {
>   $base_dn .= "dc=$dc,";
> }
> chop $base_dn;
> 
> $user_dn = "cn=" . $user_cn . "," . $base_dn;
> $contact_dn = "cn=" . $contact_cn . "," . $base_dn;
> $system_dn = "cn=" . $system_cn . "," . $base_dn;
> $kolab_dn = "cn=$hostname,cn=" . $kolab_cn . "," . $system_dn;
> $admin_dn = "cn=" . $admin_cn . "," . $user_dn;
> 
> #
> # Prompt for advanced setup
> #
> 
> 
> print "\nAdvanced setup:\n".
>       "The advanced setup is only for experts, should you choice to use 
do the \n".
>       "advanced setup, please read the documentation for the meaning of 
the \n".
>       "values. If you want to do this the easy way, just say skip the 
advanced \n".
>       "setup, everything will be created for you.\n\n";
> 
> 
> 
> $response = prompt_input ("Would you like to do the advanced setup Y/N", 
$response);
> 
> if ($response eq "Y" or $response eq "y" )
> {
>   $user_cn = prompt_input( "Please enter the user DN", $user_dn );
>   $contact_cn = prompt_input( "Please enter the contact DN", 
$contact_dn );
>   $system_cn = prompt_input( "Please enter the system DN", $system_dn );
>   $kolab_cn = prompt_input( "Please enter the kolab DN", $kolab_dn );
>   $manager_pw = prompt_input( "Please enter the manager password", 
$manager_pw );
>   $admin_cn = prompt_input( "Please enter the administrator DN" , 
$admin_dn );
>   $admin_pw = prompt_input( "Please enter the administrator password", 
$admin_pw );

Huh? It's an advanced setup thing to set the administrator and manager 
password?

>   $postmaster = prompt_input( "Please enter the postmaster e-mail 
address", $postmaster );
>   $abuse = prompt_input( "Please enter the abuse e-mail address", 
$abuse );

Not everyone will know what the abuse email address is. Not even advanced 
setuppers.

> }
> #
> #  Save the setup information to the kolab.bootstrap file
> #
> 
> my  $fd = IO::File->new($kolab_setup_file, "w+") || die "could not 
create open $kolab_setup_file";
> print $fd "hostname : $hostname\n";
> print $fd "email_domain : $email_domain\n";
> print $fd "base_dn : $base_dn\n";
> print $fd "user_dn : $user_dn\n";
> print $fd "contact_dn : $contact_dn\n";
> print $fd "system_dn : $system_dn\n";
> print $fd "kolab_dn : $kolab_dn\n";
> print $fd "manager_pw : $manager_pw\n";
> print $fd "admin_dn : $admin_dn\n";
> print $fd "admin_pw : $admin_pw\n";
> print $fd "postmaster : $postmaster\n";
> print $fd "abuse : $abuse\n";
> undef $fd;
> print "Done building $kolab_setup_file\n\n";
> chmod 0600, $kolab_setup_file;
> print "IMPORTANT NOTE:\n";
> print "Use login=manager and passwd=$manager_pw when you log into the 
webinterface!\n\n";
> print "The administrator user password=$admin_pw\n\n"

Those were the comments I had on the script.

Generally: What is the difference between the administrator and the 
manager? Is it a bug to have both? Why are there two?

Bo.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.2 (GNU/Linux)

iD8DBQFAYBq1mT99lwfUS5IRAp7EAKDQgV1zt8dxwuGZWS1Xax8c/7LT+gCggJtu
Nhrd5nBX6A/VTK0A/6ZPI8o=
=5/aq
-----END PGP SIGNATURE-----




More information about the devel mailing list