This file is indexed.

/usr/lib/urxvt/perl/remote-clipboard is in rxvt-unicode 9.14-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
#! perl

use Fcntl ();

sub msg {
   my ($self, $msg) = @_;

   my $ov = $self->overlay (-1, 0, $self->strwidth ($msg), 1, urxvt::OVERLAY_RSTYLE, 0);
   $ov->set (0, 0, $msg);

   $self->{msg} =
      urxvt::timer
              ->new
              ->after (5)
              ->cb (sub { delete $self->{msg}; undef $ov; });
}

sub wait_pipe {
   my ($self, $fh, $pid, $msg) = @_;

   $self->msg ("waiting for selection process to finish...");

   my $wait_pipe; $wait_pipe = urxvt::pw->new->start ($pid)->cb (sub {
      my ($undef, $status) = @_;
      undef $wait_pipe;
      close $fh;
      $status >>= 8;
      $self->msg ("$msg (status $status)");
   });
}

sub store {
   my ($self) = @_;

   my $txt = $self->selection;

   local %ENV = %{ $self->env };
   if (my $pid = open my $fh, "|-:utf8", $self->{store_cmd}) {
      fcntl $fh, &Fcntl::F_SETFL, &Fcntl::O_NONBLOCK;
      $self->{iow} = urxvt::iow
                     ->new
                     ->fd (fileno $fh)
                     ->events (urxvt::EV_WRITE)
                     ->start
                     ->cb (sub {
         if (my $len = syswrite $fh, $txt) {
            substr $txt, 0, $len, "";
            $self->msg ((length $txt) . " chars to go...");
         } else {
            delete $self->{iow};
            $self->wait_pipe ($fh, $pid, "selection stored");
         }
      });
   }
}

sub fetch {
   my ($self) = @_;

   my $txt;

   local %ENV = %{ $self->env };
   if (my $pid = open my $fh, "-|:utf8", $self->{fetch_cmd}) {
      fcntl $fh, &Fcntl::F_SETFL, &Fcntl::O_NONBLOCK;
      $self->{iow} = urxvt::iow
                     ->new
                     ->fd (fileno $fh)
                     ->events (urxvt::EV_READ)
                     ->start
                     ->cb (sub {
         if (my $len = sysread $fh, $txt, 8192, length $txt) {
            $self->msg ((length $txt) . " chars read...");
         } else {
            delete $self->{iow};
            $self->selection_clear;
            $self->selection ($txt);
            $self->selection_grab (urxvt::CurrentTime);
            $self->msg ("selection fetched");
         }
      });
   }
}

sub on_start {
   my ($self) = @_;

   $self->{store_cmd} = $self->x_resource ("remote-selection.store")
                        || "rsh ruth 'cat >/tmp/distributed-selection'";

   $self->{fetch_cmd} = $self->x_resource ("remote-selection.fetch")
                        || "rsh ruth 'cat /tmp/distributed-selection'";

   push @{ $self->{term}{selection_popup_hook} }, sub {
      ("selection => remote" => sub { $self->store })
   };
   push @{ $self->{term}{selection_popup_hook} }, sub {
      ("remote => selection" => sub { $self->fetch })
   };

   ()
}