steffen: server/kolab/kolab kolab_bootstrap,1.26,1.27

cvs at intevation.de cvs at intevation.de
Wed May 26 01:14:50 CEST 2004


Author: steffen

Update of /kolabrepository/server/kolab/kolab
In directory doto:/tmp/cvs-serv30781/kolab

Modified Files:
	kolab_bootstrap 
Log Message:
make the bootstrap script check for unwanted running servers by trying to connect. That will hopefully save us some headaches in the future

Index: kolab_bootstrap
===================================================================
RCS file: /kolabrepository/server/kolab/kolab/kolab_bootstrap,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -d -r1.26 -r1.27
--- kolab_bootstrap	25 May 2004 11:56:03 -0000	1.26
+++ kolab_bootstrap	25 May 2004 23:14:47 -0000	1.27
@@ -16,6 +16,7 @@
 use vars qw($opt_b);
 
 use URI;
+use Socket;
 use IO::File;
 use IO::Select;
 use Net::LDAP;
@@ -26,10 +27,27 @@
 use Sys::Hostname;
 use Term::ReadKey;
 
-my $kolab_prefix = "@l_prefix@";
-#my $kolab_prefix = "/kolab";
+#my $kolab_prefix = "@l_prefix@";
+my $kolab_prefix = "/kolab";
 my $kolab_config = $kolab_prefix."/etc/kolab/kolab.conf";
 
+##### Utility Functions
+
+# Connect to host,port and return 1 on success
+sub tryConnect {
+  my $host  = shift;
+  my $port    = shift; 
+  if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
+  die "No port" unless $port;
+  my $iaddr   = inet_aton($host)               || die "no host: $host";
+  my $paddr   = sockaddr_in($port, $iaddr);
+  my $proto   = getprotobyname('tcp');
+  socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
+  my $retval = connect(SOCK, $paddr);
+  close( SOCK );
+  return $retval;
+}
+
 # Fetch entry from ldap server or create new entry of none exist
 sub newOrExistingLDAPEntry {
   my $ldap = shift;
@@ -43,6 +61,7 @@
   }
 }
 
+##### Read config file
 print "\nKOLAB BOOTSTRAP\n\n";
 
 my $fd = IO::File->new($kolab_config, "r")
@@ -100,7 +119,7 @@
 }
 
 if ( $is_master eq "true" ) {
-  ### Master server setup
+  ##### Master server setup
   (my $dummy, my $domain) = split(/\./, $fqdn, 2);
   if (!$domain) {
     $domain = $fqdn;
@@ -186,6 +205,13 @@
       sleep 1;
       system("$kolab_prefix/etc/rc openldap stop");
       sleep 1;
+
+      # Make sure that no rouge demons are running
+      tryConnect( '127.0.0.1', 389 ) && die "A process is already listening to port 389 (ldap)\n"
+	."Please stop any running ldap server and bootstrap again\n";
+      tryConnect( '127.0.0.1', 9999 ) && die "A process is already listening to port 9999 (kolabd)\n"
+	."Please stop any running kolabd and bootstrap again\n";
+
       my $tmpl = IO::File->new("$kolab_prefix/etc/kolab/slapd.conf.template", "r") || die "could not read $kolab_prefix/etc/kolab/slapd.conf.template";
       my $slpd = IO::File->new("$kolab_prefix/etc/openldap/slapd.conf","w+") || die "could not write to $kolab_prefix/etc/openldap/slapd.conf";
       chmod (0640,"$kolab_prefix/etc/openldap/slapd.conf");
@@ -356,8 +382,8 @@
    }
  }
 } else {
-  ## Slave server setup
-  ## For now we just connect to the remote slapd
+  ##### Slave server setup
+  # For now we just connect to the remote slapd
  SLAVESTART:
   print "Now some information about the master LDAP server is required:\n\n";
   print "URI of master LDAP server: ";





More information about the commits mailing list