blob: 173f4f4dc69602e5705bbf2f131d724d0839f33f (
plain)
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
require 'custodian/testfactory.rb'
#
# The ping test.
#
# This object is instantiated if the parser sees a line such as:
#
###
### DNSHOSTS must run ping otherwise ..
###
#
#
module Custodian
module ProtocolTest
class PINGTest < TestFactory
#
# The line from which we were constructed.
#
attr_reader :line
#
# The host to test against.
#
attr_reader :host
#
# Constructor
#
def initialize( line )
#
# Save the line
#
@line = line
#
# Save the host
#
@host = line.split( /\s+/)[0]
end
#
# Helper for development.
#
def to_s
"ping-test - #{@host}."
end
#
# Convert this class to JSON such that it may be serialized.
#
def to_json
hash = { :line => @line }
hash.to_json
end
#
# Run the test.
#
def run_test
#
# Find the binary we're going to invoke.
#
binary = nil
binary = "/usr/bin/multi-ping" if ( File.exists?( "/usr/bin/multi-ping" ) )
if ( binary.nil? )
@error = "Failed to find '/usr/bin/multi-ping'"
return false
end
#
# Sanity check the hostname for ping-tests, to
# avoid this security hole:
#
# $(/tmp/exploit.sh) must run ping ..
#
if ( @host !~ /^([a-zA-Z0-9:\-\.]+)$/ )
@error = "Invalid hostname for ping-test: #{@host}"
return false
end
#
# Run the test.
#
if ( system( "#{binary} #{host}" ) == true )
return true
else
@error = "Ping failed."
return false
end
end
#
# If the test fails then report the error.
#
def error
@error
end
register_test_type "ping"
end
end
end
|