fix allowmultiple for real user with ssid
[spider.git] / perl / cluster.pl
index b7f201bd483be32fb0d33d1a271b30b7d176b1a9..9735aa30b10b5a42649625ad42ef03ae40eb9f60 100755 (executable)
@@ -153,9 +153,10 @@ use Data::Dumper;
 use IO::File;
 use Fcntl ':flock';
 use POSIX ":sys_wait_h";
-use Version;
 use Web;
 
+use vars qw($version $build $gitversion $gitbranch);
+
 use Local;
 
 
@@ -245,23 +246,28 @@ sub new_channel
                }
 
                # is he locked out ?
+               $user = DXUser::get_current($call);
                my $basecall = $call;
                $basecall =~ s/-\d+$//; # remember this for later multiple user processing
-               my $baseuser = DXUser::get_current($basecall);
-               my $lock = $user->lockout if $user;
-               if ($baseuser && $baseuser->lockout || $lock) {
-                       if (!$user || !defined $lock || $lock) {
-                               my $host = $conn->peerhost;
-                               LogDbg('DXCommand', "$call on $host is locked out, disconnected");
-                               $conn->disconnect;
-                               return;
-                       }
+               my $lock;
+               if ($user) {
+                       # we are a real user
+                       $lock = $user->lockout;
+               } elsif ($allowmultiple) {
+                       # could we be a potential "pseudo" connection   
+                       $user = DXUser::get_current($basecall);
+                       $lock = $user->lockout if $user;
+               }
+               if ($lock) {
+                       my $host = $conn->peerhost;
+                       LogDbg('DXCommand', "$call on $host is locked out, disconnected");
+                       $conn->disconnect;
+                       return;
                }
 
                # set up the basic channel info for "Normal" Users
                # is there one already connected to me - locally?
 
-               $user = DXUser::get_current($call);
                $dxchan = DXChannel::get($call);
                my $newcall = $call;
                if ($dxchan) {
@@ -297,7 +303,7 @@ sub new_channel
                                if ($bumpexisting) {
                                        my $ip = $dxchan->hostname;
                                        $dxchan->send_now('D', DXM::msg($lang, 'conbump', $call, $ip));
-                                       LogDbg('DXCommand', "$call bumped off by $ip, disconnected");
+                                       Log('', "$call bumped off by $ip, disconnected");
                                        $dxchan->disconnect;
                                } else {
                                        already_conn($conn, $call, DXM::msg($lang, 'conother', $call, $main::mycall));
@@ -380,8 +386,6 @@ sub cease
                $SIG{'INT'} = 'IGNORE';
        }
 
-       DXUser::sync;
-       DXUser::writeoutjson;
 
        if (defined &Local::finish) {
                eval {
@@ -410,7 +414,7 @@ sub cease
                $l->close_server;
        }
 
-       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitversion) ended");
+       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitbranch/$gitversion) ended");
        dbg("bye bye everyone - bye bye");
        dbgclose();
        Logclose();
@@ -494,6 +498,8 @@ sub setup_start
                        import Encode;
                        $can_encode = 1;
                }
+               $gitbranch = 'none';
+               $gitversion = 'none';
                eval { require Git; };
                unless ($@) {
                        import Git;
@@ -511,6 +517,14 @@ sub setup_start
                                        $build = $b || 0;
                                        $gitversion = "$g\[r]";
                                }
+                               my @branch = $repo->command([qw{branch}], STDERR=>0);
+                               for (@branch) {
+                                       my ($star, $b) = split /\s+/;
+                                       if ($star eq '*') {
+                                               $gitbranch = $b;
+                                               last;
+                                       }
+                               }
                        }
                }
                $SIG{__DIE__} = $w;
@@ -522,7 +536,7 @@ sub setup_start
        # banner
        my ($year) = (gmtime)[5];
        $year += 1900;
-       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitversion) started");
+       LogDbg('cluster', "DXSpider V$version, build $build (git: $gitbranch/$gitversion) started");
        dbg("Copyright (c) 1998-$year Dirk Koopman G1TLH");
 
        # load Prefixes