This file is indexed.

/usr/share/doc/ruby1.8-examples/examples/drb/name.rb is in ruby1.8-examples 1.8.7.352-2ubuntu1.6.

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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
=begin
 distributed Ruby --- NamedObject Sample
 	Copyright (c) 2000-2001 Masatoshi SEKI 
=end

=begin
How to play.

* start server 
 Terminal 1
 | % ruby name.rb druby://yourhost:7640
 | druby://yourhost:7640
 | [return] to exit

* start client
 Terminal 2
 | % ruby namec.rb druby://yourhost:7640
 | #<DRb::DRbObject:0x40164174 @uri="druby://yourhost:7640", @ref="seq">
 | #<DRb::DRbObject:0x40163c9c @uri="druby://yourhost:7640", @ref="mutex">
 | 1
 | 2
 | [return] to continue

* restart server
 Terminal 1
 type [return]
 | % ruby name.rb druby://yourhost:7640
 | druby://yourhost:7640
 | [return] to exit

* continue client 
 Terminal 2
 type [return] 
 | 1
 | 2
=end

require 'thread.rb'
require 'drb/drb'

module DRbNamedObject
  DRbNAMEDICT = {}
  attr_reader(:drb_name)

  def drb_name=(name)
    @drb_name = name
    Thread.exclusive do 
      raise(IndexError, name) if DRbNAMEDICT[name]
      DRbNAMEDICT[name] = self
    end
  end
end

class DRbNamedIdConv < DRb::DRbIdConv
  def initialize
    @dict = DRbNamedObject::DRbNAMEDICT
  end

  def to_obj(ref)
    @dict.fetch(ref) do super end
  end

  def to_id(obj)
    if obj.kind_of? DRbNamedObject
      return obj.drb_name 
    else
      return super
    end
  end
end

class Seq
  include DRbUndumped
  include DRbNamedObject

  def initialize(v, name)
    @counter = v
    @mutex = Mutex.new
    self.drb_name = name
  end

  def next_value
    @mutex.synchronize do
      @counter += 1
      return @counter
    end
  end
end

class Front
  def initialize
    seq = Seq.new(0, 'seq')
    mutex = Mutex.new
    mutex.extend(DRbUndumped)
    mutex.extend(DRbNamedObject)
    mutex.drb_name = 'mutex'
    @name = {}
    @name['seq'] = seq
    @name['mutex'] = mutex
  end
    
  def [](k)
    @name[k]
  end
end

if __FILE__ == $0
  uri = ARGV.shift

  name_conv = DRbNamedIdConv.new
  
  DRb.install_id_conv(name_conv)
  DRb.start_service(uri, Front.new)
  puts DRb.uri
  DRb.thread.join
end