X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Flock_nodes.pl;h=c9dcbc9e73fe88dd5c9557b8ac72ab543414af13;hb=refs%2Fheads%2Fnewusers;hp=4763fb1282666913a44ba01d54d1e5678dac90b6;hpb=ab811a0c902225075a9bd69749f65594079433a9;p=spider.git diff --git a/perl/lock_nodes.pl b/perl/lock_nodes.pl index 4763fb12..c9dcbc9e 100755 --- a/perl/lock_nodes.pl +++ b/perl/lock_nodes.pl @@ -1,13 +1,9 @@ -#!/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 # # @@ -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/local/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 = ; @@ -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);