/usr/lib/ruby/vendor_ruby/specinfra/command/module/ss.rb is in ruby-specinfra 2.66.0-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 | module Specinfra
module Command
module Module
module Ss
def check_is_listening(port, options={})
pattern = ":#{port} "
pattern = " #{inaddr_any_to_asterisk(options[:local_address])}#{pattern}" if options[:local_address]
"ss #{command_options(options[:protocol])} | grep -- #{escape(pattern)}"
end
private
# WORKAROUND:
# ss displays "*" instead of "0.0.0.0".
# But serverspec validates IP address by `valid_ip_address?` method:
# https://github.com/serverspec/serverspec/blob/master/lib/serverspec/type/port.rb
def inaddr_any_to_asterisk(local_address)
if local_address == '0.0.0.0'
'\*'
else
local_address
end
end
def command_options(protocol)
case protocol.to_s
when 'tcp' then "-tnl4"
when 'tcp6' then "-tnl6"
when 'udp' then "-unl4"
when 'udp6' then "-unl6"
when '' then "-tunl"
else
raise ArgumentError, "Unknown protocol [#{protocol}]"
end
end
end
end
end
end
|