This file is indexed.

/usr/lib/ruby/1.8/snmp/agent.rb is in libsnmp-ruby1.8 1.0.2-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
#
# Copyright (c) 2004 David R. Halliday
# All rights reserved.
#
# This SNMP library is free software.  Redistribution is permitted under the
# same terms and conditions as the standard Ruby distribution.  See the
# COPYING file in the Ruby distribution for details.
#

require 'snmp'
require 'socket'
require 'logger'

module SNMP

class Agent #:nodoc:all

    def initialize(listen_port=161, max_packet=8000)
        @log = Logger.new(STDOUT)
        @log.level = Logger::DEBUG
        @max_packet = max_packet
        @socket = UDPSocket.open
        @socket.bind(nil, listen_port)
        @mib = MIB::SystemMIB.new
    end
    
    def start
        @log.info "SNMP agent running"
        loop do
            begin
                data, remote_info = @socket.recvfrom(@max_packet)
                puts "Received #{data.length} bytes"
                p data
                message = Message.decode(data)
                case message.pdu
                    when GetRequest
                        response = message.response
                        response.pdu.varbind_list.each do |v|
                            v.value = @mib.get(v.name)
                        end
                    when SetRequest
                        response = message.response
                    else
                        raise "invalid message #{message.to_s}"
                end
                puts "Responding to #{remote_info[3]}:#{remote_info[1]}"
                encoded_message = response.encode
                n=@socket.send(encoded_message, 0, remote_info[3], remote_info[1])
                p encoded_message
            rescue => e
                @log.error e
                shutdown
            end
        end
    end
    
    def shutdown
        @log.info "SNMP agent stopping"
        @socket.close
        exit
    end

    alias stop :shutdown
    
end

end

if $0 == __FILE__
agent = SNMP::Agent.new(1061)
trap("INT") { agent.shutdown }
agent.start
end