fixed confusion over DXCluster->get_exact and DXUser->get
[spider.git] / cmd / set / privilege.pl
index 87be2aa89f054b8c1dee09447b998b5a4dca55d3..5a475e7fe70ec90c07b1a8280a77276912eb22bc 100644 (file)
@@ -13,24 +13,38 @@ my $call;
 my $priv = shift @args;
 my @out;
 my $user;
+my $ref;
 
-$DB::single = 1;
-
-return (0) if $self->priv < 9;
+if ($self->priv < 9) {
+       Log('DXCommand', $self->call . " attempted to set privilege $priv for @args");
+       return (1, $self->msg('e5'));
+}
 
 if ($priv < 0 || $priv > 9) {
-  return (0, $self->msg('e5')); 
+  return (1, $self->msg('e5')); 
 }
 
 foreach $call (@args) {
-  $call = uc $call;
-  my $user = DXUser->get_current($call);
-  if ($user) {
-    $user->priv($priv);
-       $user->put();
-    push @out, $self->msg('priv', $call);
-  } else {
-    push @out, $self->msg('e3', "Set Privilege", $call);
-  }
+       $call = uc $call;
+       unless ($self->remotecmd) {
+               if ($ref = DXChannel->get($call)) {
+                       $ref->priv($priv);
+                       $ref->user->priv($priv);
+                       $ref->user->put();
+               }
+               if (!$ref && ($user = DXUser->get($call))) {
+                       $user->priv($priv);
+                       $user->put();
+               }
+               if ($ref || $user) {
+                       push @out, $self->msg('priv', $call);
+                       Log('DXCommand', "Privilege set to $priv on $call by " . $self->call);
+               } else {
+                       push @out, $self->msg('e3', "Set Privilege", $call);
+               }
+       } else {
+               push @out, $self->msg('sorry');
+               Log('DXCommand', $self->call . " attempted to set privilege $priv for $call remotely");
+       }
 }
 return (1, @out);