add an RBN line to progress
[spider.git] / perl / lock_nodes.pl
index c80c69732923bf9474bd00cb77eec492aba6df33..c9dcbc9e73fe88dd5c9557b8ac72ab543414af13 100755 (executable)
@@ -1,16 +1,12 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 #
-# remove all records with the sysop/cluster callsign and recreate
-# it from the information contained in DXVars
+# Lock all non local nodes that have a privileges <= 1
 #
 # WARNING - this must be run when the cluster.pl is down!
 #
-# This WILL NOT delete an old sysop call if you are simply
-# changing the callsign.
-#
 # Copyright (c) 1998 Dirk Koopman G1TLH
 #
-# $Id$
+#
 # 
 
 # make sure that modules are searched in the order local then perl
@@ -19,14 +15,15 @@ BEGIN {
        # root of directory tree for this system
        $root = "/spider"; 
        $root = $ENV{'DXSPIDER_ROOT'} if $ENV{'DXSPIDER_ROOT'};
-        unshift @INC, "$root/perl";     # this IS the right way round!
+    unshift @INC, "$root/perl";     # this IS the right way round!
        unshift @INC, "$root/local";
 }
 
-use DXVars;
+use SysVar;
 use DXUser;
+use DXUtil;
 
-my $lockfn = "$root/perl/cluster.lck";       # lock file name
+$lockfn = "$main::local_data/cluster.lck";       # lock file name (now in local d
 if (-e $lockfn) {
        open(CLLOCK, "$lockfn") or die "Can't open Lockfile ($lockfn) $!";
        my $pid = <CLLOCK>;
@@ -37,33 +34,40 @@ if (-e $lockfn) {
 
 my @nodes = map { uc } @ARGV;
 
-DXUser->init($userfn, 1);
+DXUser::init(4);
 
 my $count;
 my $nodes;
 my @ignore;
-my ($action, $key, $data) = (0,0,0);
-for ($action = DXUser::R_FIRST, $count = 0; !$DXUser::dbm->seq($key, $data, $action); $action = DXUser::R_NEXT) {
-       if ($data =~ m{sort => '[ACRSX]'}) {
-               my $user = DXUser->get($key);
-               if ($user->is_node) {
-                       $nodes ++;
-                       if (grep $key eq $_, (@nodes, $mycall)) {
-                               push @ignore, $key;
-                               next;
-                       }
-                       my $priv = $user->priv;
-                       if ($priv > 1) {
-                               push @ignore, $key;
-                               next;
-                       }
-                       $user->priv(1) unless $priv;
-                       $user->lockout(1);
-                       $user->put;
-                       $count++;
+
+my @calls = scan(sub
+                                {
+                                        my $k = shift;
+                                        return $_[0] =~ m{"sort":"[ACRSX]"} ? $k : ();
+                                });
+
+foreach my $key (@calls) {
+       my $user = DXUser::get($key);
+       if ($user->is_node) {
+               $nodes ++;
+               if (grep $key eq $_, (@nodes, $mycall)) {
+                       push @ignore, $key;
+                       next;
+               }
+               my $priv = $user->priv;
+               if ($priv > 1) {
+                       push @ignore, $key;
+                       next;
+               }
+               $user->priv(1) unless $priv;
+               $user->lockout(1);
+               $user->put;
+               $count++;
                }
        }
 }
+DXUser::sync;
+DXUser::writeoutjson;
 
 print "locked out $count nodes out of $nodes\n";
 print scalar @ignore, " nodes ignored (", join(',', @ignore), ")\n";
@@ -71,6 +75,6 @@ print "If there are any nodes missing on the above list then you MUST do\n";
 print "a set/node (set/spider, set/clx etc) on each of them to allow them\n";
 print "to connect to you or you to them\n"; 
  
-DXUser->finish();
+DXUser::finish();
 exit(0);