better error message
[spider.git] / perl / cluster.pl
index 203f6956a1bc8a011dd054b3e21e6d64c8ceacbd..205d2fe7633060eac89f6df4f7d329b775b75e33 100755 (executable)
@@ -23,6 +23,14 @@ BEGIN {
        unshift @INC, "$root/perl";     # this IS the right way round!
        unshift @INC, "$root/local";
 
+       # do some validation of the input
+       die "The directory $root doesn't exist, please RTFM" unless -d $root;
+       die "$root/local doesn't exist, please RTFM" unless -d "$root/local";
+       die "$root/local/DXVars.pm doesn't exist, please RTFM" unless -e "$root/local/DXVars.pm";
+       
+       mkdir "$root/local_cmd" unless -e "$root/local_cmd";
+       
+
        # try to create and lock a lockfile (this isn't atomic but 
        # should do for now
        $lockfn = "$root/perl/cluster.lck";       # lock file name
@@ -293,7 +301,7 @@ sub process_inqueue
        while (@inqueue) {
                my $self = shift @inqueue;
                return if !$self;
-       
+
                my $data = $self->{data};
                my $dxchan = $self->{dxchan};
                my $error;
@@ -302,13 +310,18 @@ sub process_inqueue
        
                # do the really sexy console interface bit! (Who is going to do the TK interface then?)
                dbg("<- $sort $call $line\n") if $sort ne 'D' && isdbg('chan');
-
+               if ($self->{disconnecting}) {
+                       dbg('In disconnection, ignored');
+                       next;
+               }
+               
                # handle A records
                my $user = $dxchan->user;
                if ($sort eq 'A' || $sort eq 'O') {
                        $dxchan->start($line, $sort);  
                } elsif ($sort eq 'I') {
                        die "\$user not defined for $call" if !defined $user;
+
                        # normal input
                        $dxchan->normal($line);
                } elsif ($sort eq 'Z') {
@@ -377,6 +390,14 @@ Bands::load();
 dbg("loading user file system ..."); 
 DXUser->init($userfn, 1);
 
+# look for the sysop and the alias user and complain if they aren't there
+{
+       my $ref = DXUser->get($mycall);
+       die "$mycall missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
+       $ref = DXUser->get($myalias);
+       die "$myalias missing, run the create_sysop.pl script and please RTFM" unless $ref && $ref->priv == 9;
+}
+
 # start listening for incoming messages/connects
 dbg("starting listeners ...");
 my $conn = IntMsg->new_server($clusteraddr, $clusterport, \&login);