diff options
author | Steve Kemp <steve@steve.org.uk> | 2012-11-13 17:22:43 +0000 |
---|---|---|
committer | Steve Kemp <steve@steve.org.uk> | 2012-11-13 17:22:43 +0000 |
commit | ab3961ec0603140ac5730f90b067c01e9d73d070 (patch) | |
tree | eacbf6a3573759ea0f1ee8348a09ca39d60028b7 /lib/custodian/protocol-tests/smtp.rb | |
parent | a977d57759bbe20ae6a6eff6ef1af29a6b7ff936 (diff) |
Renamed and moved files around.
--HG--
rename : util/multi-ping => bin/multi-ping
rename : parser/parser.rb => bin/parser.rb
rename : worker/worker => bin/worker
rename : worker/tests/README => lib/README
rename : worker/tests/ftp.rb => lib/custodian/protocol-tests/ftp.rb
rename : worker/tests/http.rb => lib/custodian/protocol-tests/http.rb
rename : worker/tests/https.rb => lib/custodian/protocol-tests/https.rb
rename : worker/tests/jabber.rb => lib/custodian/protocol-tests/jabber.rb
rename : worker/tests/ldap.rb => lib/custodian/protocol-tests/ldap.rb
rename : worker/tests/ping.rb => lib/custodian/protocol-tests/ping.rb
rename : worker/tests/rsync.rb => lib/custodian/protocol-tests/rsync.rb
rename : worker/tests/smtp.rb => lib/custodian/protocol-tests/smtp.rb
rename : worker/tests/ssh.rb => lib/custodian/protocol-tests/ssh.rb
Diffstat (limited to 'lib/custodian/protocol-tests/smtp.rb')
-rwxr-xr-x | lib/custodian/protocol-tests/smtp.rb | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/lib/custodian/protocol-tests/smtp.rb b/lib/custodian/protocol-tests/smtp.rb new file mode 100755 index 0000000..aa577d6 --- /dev/null +++ b/lib/custodian/protocol-tests/smtp.rb @@ -0,0 +1,145 @@ +#!/usr/bin/ruby + + + +require 'socket' +require 'timeout' + + +# +# Test that we can receive a response from an SMTP server that looks +# reasonable. +# +class SMTPTest + + # + # Data passed from the JSON hash. + # + attr_reader :test_data + + # + # The error text we return on failure. + # + attr_reader :error + + + + # + # Save the data away. + # + def initialize( data ) + @test_data = data + @error = nil + + + # + # Ensure we have a host to probe + # + if ( @test_data["target_host"].nil? ) + @error = "Missing target for the test." + raise ArgumentError, @error + end + + # + # Ensure we have a port to test. + # + if ( @test_data["test_port"].nil? ) + @error = "Missing port for the test." + raise ArgumentError, @error + end + end + + + # + # Run the test. + # + # Return "true" on success + # + # Return "false" on failure. + # + # If the test fails the details should be retrieved from "error". + # + def run_test + @error = "" + + # + # Get the hostname & port to test against. + # + host = @test_data['target_host'] + port = @test_data['test_port'] + + puts "SMTP testing host #{host}:#{port}" if ( @test_data['verbose'] ) + + begin + timeout(3) do + + begin + socket = TCPSocket.new( host, port ) + socket.puts( "QUIT") + + banner = socket.gets(nil) + banner = banner[0,40] + + socket.close() + + if ( banner =~ /SMTP/i ) + puts "SMTP alive: #{banner}" if ( @test_data['verbose'] ) + return true + else + @error = "Banner didn't seem reasonable: #{banner}" + return false; + end + rescue + @error = "SMTP exception on host #{host}:#{port} - #{$!}" + return false + end + end + rescue Timeout::Error => e + @error = "TIMEOUT: #{e}" + return false + end + + @error = "Misc failure" + return false + end + + + + # + # Return the error text for why this test failed. + # + def error + return @error + end + +end + + +# +# Sample test, for testing. +# +if __FILE__ == $0 then + + # + # Sample data. + # + test = { + "target_host" => "mail.steve.org.uk", + "test_type" => "smtp", + "verbose" => 1, + "test_alert" => "SMTP failure", + } + + + # + # Run the test. + # + obj = SMTPTest.new( test ) + if ( obj.run_test ) + puts "TEST OK" + else + puts "TEST FAILED" + puts obj.error() + end + +end |