Index: fedkit/splitter.pl
===================================================================
--- fedkit/splitter.pl	(revision e2a71ebe930dc6b72e51b04d2c13bcd4e121376f)
+++ fedkit/splitter.pl	(revision 33548e1471d914be0b4bc87b44220b916a8ada18)
@@ -166,47 +166,36 @@
     my $pid;		    # Child pid
 
-    if ( $timeout ) {
-	if ( $pid = fork () ) {
-	    # Parent process
-	    # The eval acts as a signal catcher.  If the alarm goes off inside
-	    # the eval, the die will put "alarm\n" into $@, otherwise the
-	    # return value of the execution in the child process will be used.
-	    my $rv = eval {
-		local $SIG{'ALRM'} = sub{ die "alarm\n"; };
-		my $rv;
-
-		alarm $timeout;
-		$rv = waitpid($pid, 0);
-		alarm 0;
-		$rv;
-	    };
-
-	    # If the eval succeeded, $@ will be null and we can use $rv, which
-	    # is the return code from the subprocess.  If the eval timed out,
-	    # print a warning and assume the best.
-	    if ($@ eq "alarm\n" ) {
-		warn "$wname timed out - pid $pid still live\n";
-		return 1;
-	    }
-	    else {
-		return $rv;
-	    }
+    $timeout = 0 unless $timeout;   # Force default timeout
+
+    if ( $pid = fork () ) {
+	# Parent process
+	# The eval acts as a signal catcher.  If the alarm goes off inside
+	# the eval, the die will put "alarm\n" into $@, otherwise the
+	# return value of the execution in the child process will be used.
+	my $rv = eval {
+	    local $SIG{'ALRM'} = sub{ die "alarm\n"; };
+	    my $rv;
+
+	    alarm $timeout;
+	    $rv = waitpid($pid, 0);
+	    alarm 0;
+	    $rv;
+	};
+
+	# If the eval succeeded, $@ will be null and we can use $rv, which
+	# is the return code from the subprocess.  If the eval timed out,
+	# print a warning and assume the best.
+	if ($@ eq "alarm\n" ) {
+	    warn "$wname timed out - pid $pid still live\n";
+	    return 1;
 	}
 	else {
-	    # Child process
-	    # XXX system with a relative pathname is sort of gross
-	    exec("ssh $user\@$host $cmd");
-	    exit 0;
+	    return $rv;
 	}
     }
     else {
-	# No timeout, do all the work here.
-	# XXX system with a relative pathname is sort of gross
-	system ("ssh $user\@$host $cmd");
-	if ($?) {
-	    warn "$wname failed $?\n" if $wname;
-	    return 0;
-	}
-	else { return 1; }
+	# Child process
+	exec("ssh $user\@$host $cmd");
+	exit 0;
     }
 }
@@ -441,4 +430,6 @@
 $fail_soft = $opts{'F'} || $opts{'failsoft'};
 
+warn "-N does nothing now.  Only one testbeds format supported.\n"
+    if $opts{'N'};
 $startem = $opts{'n'} ? 0 : 1;		# If true, start the sub-experiments
 $timeout = $opts{'t'} || $opts{'timeout'};
@@ -483,37 +474,6 @@
 die "Must supply file, master and experiment" unless $master && $tcl && $eid;
 
-if ($opts{'N'} ) {
-    &parse_testbeds($tb_config, $tbparams) ||
-	die "Cannot testbed congfigurations from $tb_config: $!\n";
-}
-else {
-    # Read a hash of per-testbed parameters from the local configurations.
-    my $conf = new IO::File($tb_config) || 
-	die "can't read testbed configutions from $tb_config: $!\n";
-    while (<$conf>) {
-	next if /^#/;
-	chomp;
-	my($tb, $h, $d, $u, $p, $es, $gs, $mes, $mgs, $t, $i, $fs, $boss,
-	    $tun) = split(":", $_);
-	$tbparams->{$tb}->{'host'} = $h;
-	$tbparams->{$tb}->{'user'} = $u;
-	$tbparams->{$tb}->{'domain'} = $d;
-	$tbparams->{$tb}->{'project'} = $p;
-	$tbparams->{$tb}->{'gwtype'} = $t;
-	$tbparams->{$tb}->{'expstart'} = $es;
-	$tbparams->{$tb}->{'gwstart'} = $gs;
-	$tbparams->{$tb}->{'mexpstart'} = $mes;
-	$tbparams->{$tb}->{'mgwstart'} = $mgs;
-	$tbparams->{$tb}->{'gwimage'} = $i;
-	$tbparams->{$tb}->{'fs'} = $fs;
-	$tbparams->{$tb}->{'boss'} = $boss;
-	$tbparams->{$tb}->{'tun'} = $tun;
-
-	# Make sure the domain starts with a period
-	$tbparams->{$tb}->{'domain'} = "." . $tbparams->{$tb}->{'domain'}
-	    unless $tbparams->{$tb}->{'domain'} =~ /^\./;
-    }
-    $conf->close();
-}
+&parse_testbeds($tb_config, $tbparams) ||
+    die "Cannot testbed congfigurations from $tb_config: $!\n";
 
 # Open a pipe to the splitter program and start it parsing the experiments
@@ -940,15 +900,14 @@
 =head2 Testbeds file
 
-The configuration file (F<./testbeds> unless overridden by B<-c>) is a
-colon-separated set of parameters keyed by testbed name.  The fields, in order,
-are:
-
-=over 5
-
-=item name
-
-The testbed to which this line of parameters applies.
-
-=item user
+The configuration file (F<./testbeds> unless overridden by B<-c>) is a file of
+scoped attribute-value pairs where each attribute is specified on a separate
+line of the configuration file.  Each testbed's parameters are preceeded by the
+testbed label in brackets ([]) on a line by itself.  After that the parameters
+are specified as parameter: value.  This is essentially the same format as the
+configuration file.  Parameters are:
+
+=over 4
+
+=item User
 
 The user under which to make requests to this testbed.  The user running
@@ -956,23 +915,23 @@
 testbed.
 
-=item host
+=item OpsNode
 
 The host name of the testbed's ops node.  The user calling B<splitter.pl> must
 be able to execute commands on this host via L<ssh(1)>.
 
-=item domain
+=item Domain
 
 The domain of nodes in this testbed (including the ops host).  This parameter
 should always start with a period.
 
-=item project
+=item Project
 
 The project under which to instantiate sub-experiments on this testbed.
 
-=item gateway type
-
-The node type for inter-testbed gateway nodes on this testbed.
-
-=item experiment start (slave)
+=item ConnectorType
+
+The node type for inter-testbed connector nodes on this testbed.
+
+=item SlaveNodeStartCmd
 
 The start command to run on experimental nodes when this testbed is used as a
@@ -981,10 +940,10 @@
 by the gatway configuration file.
 
-=item gateway start (slave)
+=item SlaveConnectorStartCmd
 
 The start command to run on gateway nodes when this testbed is used as a slave.
 The same string substitutions are made in this command as in experiment start.
 
-=item experiment start (master)
+=item MasterNodeStartCmd
 
 The start command to run on experimental nodes when this testbed is used as a
@@ -992,5 +951,5 @@
 experiment start.
 
-=item gateway start (master)
+=item MasterConnectorStartCmd
 
 The start command to run on gateway nodes when this testbed is used as a
@@ -998,85 +957,4 @@
 experiment start.
 
-=item gateway image
-
-The disk image to be loaded on a gateway node on this testbed.
-
-=item filesystem node
-
-The node in the master testbed from which filesystems are mounted.
-
-=item boss node
-
-The node in the master testbed that controls the testbed.
-
-=item tunnel configuration
-
-True if the connector needs to do DETER federation.  This parameter will
-probably be removed.
-
-=back
-
-The parsing of the testbeds is extremely simple.  Colons separate each
-field and there is n provision for escaping them at this time.
-
-=head2 New Testbeds File Format
-
-The testbeds file has ben revamped to make it more human readable.  The
-parameters are now named and specified on separate lines of the configuration
-file.  Each testbed's parameters are preceeded by the testbed label in brackets
-([]) on a line by itself.  After that the parameters are specified as
-parameter: value.  This is essentially the same format as the configuration
-file.  Parameters are:
-
-=over 4
-
-=item User
-
-The user under which to make requests to this testbed.  The user running
-B<splitter.pl> must be able to authenicate as this user under L<ssh(1)> to this
-testbed.
-
-=item OpsNode
-
-The host name of the testbed's ops node.  The user calling B<splitter.pl> must
-be able to execute commands on this host via L<ssh(1)>.
-
-=item Domain
-
-The domain of nodes in this testbed (including the ops host).  This parameter
-should always start with a period.
-
-=item Project
-
-The project under which to instantiate sub-experiments on this testbed.
-
-=item ConnectorType
-
-The node type for inter-testbed connector nodes on this testbed.
-
-=item SlaveNodeStartCmd
-
-The start command to run on experimental nodes when this testbed is used as a
-slave.  In all the start commands the string FEDDIR will be replaced by the
-local experiment's federation scripts directory and the string GWCONF replaced
-by the gatway configuration file.
-
-=item SlaveConnectorStartCmd
-
-The start command to run on gateway nodes when this testbed is used as a slave.
-The same string substitutions are made in this command as in experiment start.
-
-=item MasterNodeStartCmd
-
-The start command to run on experimental nodes when this testbed is used as a
-master.  The same string substitutions are made in this command as in
-experiment start.
-
-=item MasterConnectorStartCmd
-
-The start command to run on gateway nodes when this testbed is used as a
-master.  The same string substitutions are made in this command as in
-experiment start.
-
 =item ConnectorImage
 
