specinfra 2.0.0.beta15 → 2.0.0.beta16
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/specinfra.rb +1 -1
- data/lib/specinfra/command/aix/base/file.rb +15 -13
- data/lib/specinfra/command/aix/base/group.rb +5 -3
- data/lib/specinfra/command/aix/base/package.rb +7 -5
- data/lib/specinfra/command/aix/base/port.rb +5 -3
- data/lib/specinfra/command/aix/base/service.rb +7 -5
- data/lib/specinfra/command/aix/base/user.rb +10 -8
- data/lib/specinfra/command/arch/base/file.rb +4 -2
- data/lib/specinfra/command/arch/base/package.rb +17 -15
- data/lib/specinfra/command/arch/base/service.rb +3 -1
- data/lib/specinfra/command/base.rb +70 -68
- data/lib/specinfra/command/base/cron.rb +8 -6
- data/lib/specinfra/command/base/file.rb +94 -92
- data/lib/specinfra/command/base/group.rb +8 -6
- data/lib/specinfra/command/base/host.rb +18 -16
- data/lib/specinfra/command/base/mail_alias.rb +5 -3
- data/lib/specinfra/command/base/package.rb +36 -34
- data/lib/specinfra/command/base/port.rb +7 -5
- data/lib/specinfra/command/base/process.rb +10 -9
- data/lib/specinfra/command/base/routing_table.rb +6 -4
- data/lib/specinfra/command/base/service.rb +19 -17
- data/lib/specinfra/command/base/user.rb +24 -22
- data/lib/specinfra/command/darwin/base/file.rb +35 -33
- data/lib/specinfra/command/darwin/base/package.rb +12 -10
- data/lib/specinfra/command/darwin/base/port.rb +5 -3
- data/lib/specinfra/command/darwin/base/service.rb +7 -5
- data/lib/specinfra/command/debian/base/package.rb +16 -14
- data/lib/specinfra/command/debian/base/service.rb +5 -3
- data/lib/specinfra/command/fedora/base/service.rb +7 -6
- data/lib/specinfra/command/fedora/v15/service.rb +3 -1
- data/lib/specinfra/command/freebsd/base/file.rb +8 -6
- data/lib/specinfra/command/freebsd/base/package.rb +13 -11
- data/lib/specinfra/command/freebsd/base/port.rb +5 -3
- data/lib/specinfra/command/freebsd/base/service.rb +4 -2
- data/lib/specinfra/command/freebsd/v10/package.rb +13 -11
- data/lib/specinfra/command/gentoo/base/package.rb +4 -2
- data/lib/specinfra/command/gentoo/base/service.rb +9 -7
- data/lib/specinfra/command/linux/base/file.rb +10 -8
- data/lib/specinfra/command/linux/base/interface.rb +13 -11
- data/lib/specinfra/command/linux/base/iptables.rb +9 -7
- data/lib/specinfra/command/linux/base/kernel_module.rb +4 -2
- data/lib/specinfra/command/linux/base/lxc_container.rb +7 -5
- data/lib/specinfra/command/linux/base/selinux.rb +9 -7
- data/lib/specinfra/command/linux/base/zfs.rb +3 -1
- data/lib/specinfra/command/nixos/base/package.rb +12 -10
- data/lib/specinfra/command/nixos/base/service.rb +3 -1
- data/lib/specinfra/command/openbsd/base/file.rb +31 -29
- data/lib/specinfra/command/openbsd/base/interface.rb +8 -13
- data/lib/specinfra/command/openbsd/base/mail_alias.rb +4 -2
- data/lib/specinfra/command/openbsd/base/package.rb +10 -8
- data/lib/specinfra/command/openbsd/base/port.rb +4 -2
- data/lib/specinfra/command/openbsd/base/service.rb +7 -5
- data/lib/specinfra/command/openbsd/base/user.rb +8 -6
- data/lib/specinfra/command/opensuse/base/service.rb +3 -1
- data/lib/specinfra/command/plamo/base/package.rb +7 -5
- data/lib/specinfra/command/plamo/base/service.rb +6 -4
- data/lib/specinfra/command/redhat/base/file.rb +5 -3
- data/lib/specinfra/command/redhat/base/package.rb +14 -12
- data/lib/specinfra/command/redhat/base/service.rb +4 -2
- data/lib/specinfra/command/redhat/base/yumrepo.rb +7 -5
- data/lib/specinfra/command/redhat/v5/iptables.rb +7 -5
- data/lib/specinfra/command/redhat/v7/service.rb +3 -1
- data/lib/specinfra/command/smartos/base/package.rb +10 -8
- data/lib/specinfra/command/smartos/base/service.rb +7 -5
- data/lib/specinfra/command/solaris/base/cron.rb +8 -6
- data/lib/specinfra/command/solaris/base/file.rb +15 -13
- data/lib/specinfra/command/solaris/base/group.rb +5 -3
- data/lib/specinfra/command/solaris/base/host.rb +7 -5
- data/lib/specinfra/command/solaris/base/ipfilter.rb +4 -2
- data/lib/specinfra/command/solaris/base/ipnat.rb +5 -3
- data/lib/specinfra/command/solaris/base/package.rb +7 -5
- data/lib/specinfra/command/solaris/base/port.rb +9 -7
- data/lib/specinfra/command/solaris/base/service.rb +14 -13
- data/lib/specinfra/command/solaris/base/user.rb +10 -8
- data/lib/specinfra/command/solaris/base/zfs.rb +3 -1
- data/lib/specinfra/command/solaris/v10/file.rb +33 -31
- data/lib/specinfra/command/solaris/v10/group.rb +4 -2
- data/lib/specinfra/command/solaris/v10/host.rb +9 -7
- data/lib/specinfra/command/solaris/v10/package.rb +7 -5
- data/lib/specinfra/command/solaris/v10/user.rb +8 -6
- data/lib/specinfra/command/suse/base/package.rb +14 -12
- data/lib/specinfra/command/suse/base/service.rb +4 -2
- data/lib/specinfra/command/ubuntu/base/ppa.rb +11 -9
- data/lib/specinfra/command/ubuntu/base/service.rb +4 -2
- data/lib/specinfra/command/windows/base.rb +11 -10
- data/lib/specinfra/command/windows/base/feature.rb +11 -9
- data/lib/specinfra/command/windows/base/file.rb +72 -71
- data/lib/specinfra/command/windows/base/group.rb +7 -5
- data/lib/specinfra/command/windows/base/host.rb +18 -16
- data/lib/specinfra/command/windows/base/hot_fix.rb +13 -11
- data/lib/specinfra/command/windows/base/iis_app_pool.rb +11 -9
- data/lib/specinfra/command/windows/base/iis_website.rb +26 -24
- data/lib/specinfra/command/windows/base/package.rb +7 -5
- data/lib/specinfra/command/windows/base/port.rb +11 -9
- data/lib/specinfra/command/windows/base/process.rb +5 -3
- data/lib/specinfra/command/windows/base/registry_key.rb +36 -35
- data/lib/specinfra/command/windows/base/scheduled_task.rb +6 -4
- data/lib/specinfra/command/windows/base/service.rb +21 -19
- data/lib/specinfra/command/windows/base/user.rb +16 -14
- data/lib/specinfra/runner.rb +1 -2
- data/lib/specinfra/version.rb +1 -1
- data/spec/command/base_spec.rb +12 -4
- data/spec/command/module/systemd_spec.rb +14 -4
- data/spec/command/redhat/interface_spec.rb +1 -1
- metadata +1 -2
- data/lib/specinfra/command/smartos/tmp.rb +0 -8
@@ -1,16 +1,11 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::Interface < Specinfra::Command::Base::Interface
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
class << self
|
3
|
+
def get_speed_of(name)
|
4
|
+
"ifconfig #{name} | grep 'media\:' | perl -pe 's|.*media\:.*\\((.*?)\\)|\\1|'"
|
5
|
+
end
|
6
|
+
|
7
|
+
def check_has_ipv4_address(interface, ip_address)
|
8
|
+
"ifconfig #{interface} | grep -w inet | cut -d ' ' -f 2"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::MailAlias < Specinfra::Command::Base::MailAlias
|
2
|
-
|
3
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_aliased_to(recipient, target)
|
4
|
+
"egrep '^#{escape(recipient)}:.*#{escape(target)}' /etc/mail/aliases"
|
5
|
+
end
|
4
6
|
end
|
5
7
|
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::Package < Specinfra::Command::Base::Package
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_installed(package, version=nil)
|
4
|
+
if version
|
5
|
+
"pkg_info -a | cut -d ' ' -f 1 | grep #{escape(package)}-#{escape(version)}"
|
6
|
+
else
|
7
|
+
"pkg_info -a | cut -d ' ' -f 1 | grep #{escape(package)}"
|
8
|
+
end
|
7
9
|
end
|
8
|
-
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def install(package)
|
12
|
+
"pkg_add #{package}"
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::Port < Specinfra::Command::Base::Port
|
2
|
-
|
3
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_listening(port, opts={})
|
4
|
+
"netstat -nat -f inet | egrep '((tcp|udp).*\.#{port}.*LISTEN$)'"
|
5
|
+
end
|
4
6
|
end
|
5
7
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::Service < Specinfra::Command::Base::Service
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_enabled(service, level=nil)
|
4
|
+
"egrep '(#{escape(service)}_flags=|^pkg_scripts=\"(.*)#{escape(service)}(.*)\")' /etc/rc.conf.local | grep -v \=NO"
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
def check_is_running(service)
|
8
|
+
"/etc/rc.d/#{escape(service)} status"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class Specinfra::Command::Openbsd::Base::User < Specinfra::Command::Base::User
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
class << self
|
3
|
+
def check_has_login_shell(user, path_to_shell)
|
4
|
+
"getent passwd #{escape(user)} | cut -f 7 -d ':' | grep #{escape(path_to_shell)}"
|
5
|
+
end
|
6
|
+
|
7
|
+
def check_has_home_directory(user, path_to_home)
|
8
|
+
"getent passwd #{escape(user)} | cut -f 6 -d ':' | grep #{escape(path_to_home)}"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
12
|
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class Specinfra::Command::Plamo::Base::Package < Specinfra::Command::Linux::Base::Package
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_installed(package, version=nil)
|
4
|
+
cmd = "ls /var/log/packages/#{escape(package)}"
|
5
|
+
if version
|
6
|
+
cmd = "#{cmd} && grep -E \"PACKAGE NAME:.+#{escape(package)}-#{escape(version)}\" /var/log/packages/#{escape(package)}"
|
7
|
+
end
|
8
|
+
cmd
|
6
9
|
end
|
7
|
-
cmd
|
8
10
|
end
|
9
11
|
end
|
@@ -1,8 +1,10 @@
|
|
1
1
|
class Specinfra::Command::Plamo::Base::Service < Specinfra::Command::Linux::Base::Service
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_enabled(service, level=3)
|
4
|
+
# This check is not necessarily detected whether service is enabled or not
|
5
|
+
# TODO: check rc.inet2 $SERV variable
|
6
|
+
"test -x /etc/rc.d/init.d/#{escape(service)}"
|
7
|
+
end
|
6
8
|
end
|
7
9
|
end
|
8
10
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class Specinfra::Command::Redhat::Base::File < Specinfra::Command::Linux::Base::File
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_accessible_by_user(file, user, access)
|
4
|
+
# Redhat-specific
|
5
|
+
"runuser -s /bin/sh -c \"test -#{access} #{file}\" #{user}"
|
6
|
+
end
|
5
7
|
end
|
6
8
|
end
|
@@ -1,20 +1,22 @@
|
|
1
1
|
class Specinfra::Command::Redhat::Base::Package < Specinfra::Command::Linux::Base::Package
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_installed(package, version=nil)
|
4
|
+
cmd = "rpm -q #{escape(package)}"
|
5
|
+
if version
|
6
|
+
cmd = "#{cmd} | grep -w -- #{escape(version)}"
|
7
|
+
end
|
8
|
+
cmd
|
6
9
|
end
|
7
|
-
cmd
|
8
|
-
end
|
9
10
|
|
10
|
-
|
11
|
+
alias :check_is_installed_by_rpm :check_is_installed
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
13
|
+
def get_version(package, opts=nil)
|
14
|
+
"rpm -qi #{package} | grep Version | awk '{print $3}'"
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
def install(package)
|
18
|
+
cmd = "yum -y install #{package}"
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class Specinfra::Command::Redhat::Base::Service < Specinfra::Command::Linux::Base::Service
|
2
|
-
|
3
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_enabled(service, level=3)
|
4
|
+
"chkconfig --list #{escape(service)} | grep #{level}:on"
|
5
|
+
end
|
4
6
|
end
|
5
7
|
end
|
6
8
|
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class Specinfra::Command::Redhat::Base::Yumrepo < Specinfra::Command::Linux::Base::Yumrepo
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_exists(repository)
|
4
|
+
"yum repolist all -C | grep ^#{escape(repository)}"
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
def check_is_enabled(repository)
|
8
|
+
"yum repolist all -C | grep ^#{escape(repository)} | grep enabled"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
12
|
|
@@ -1,8 +1,10 @@
|
|
1
1
|
class Specinfra::Command::Redhat::V5::Iptables < Specinfra::Command::Redhat::Base::Iptables
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
class << self
|
3
|
+
def check_has_rule(rule, table=nil, chain=nil)
|
4
|
+
cmd = "iptables-save"
|
5
|
+
cmd += " -t #{escape(table)}" if table
|
6
|
+
cmd += " | grep -- #{escape(rule)}"
|
7
|
+
cmd
|
8
|
+
end
|
7
9
|
end
|
8
10
|
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
class Specinfra::Command::Smartos::Base::Package < Specinfra::Command::Solaris::Base::Package
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_installed(package, version=nil)
|
4
|
+
cmd = "/opt/local/bin/pkgin list 2> /dev/null | grep -qw ^#{escape(package)}"
|
5
|
+
if version
|
6
|
+
cmd = "#{cmd}-#{escape(version)}"
|
7
|
+
end
|
8
|
+
cmd
|
6
9
|
end
|
7
|
-
cmd
|
8
|
-
end
|
9
10
|
|
10
|
-
|
11
|
-
|
11
|
+
def get_version(package, opts=nil)
|
12
|
+
"pkgin list | cut -f 1 -d ' ' | grep -E '^#{escape(package)}-([^-])+$' | grep -Eo '(\\.|\\w)+$'"
|
13
|
+
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class Specinfra::Command::Smartos::Base::Service < Specinfra::Command::Solaris::Base::Service
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_enabled(service, level=nil)
|
4
|
+
"svcs -l #{escape(service)} 2> /dev/null | grep -wx '^enabled.*true$'"
|
5
|
+
end
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
def check_is_running(service)
|
8
|
+
"svcs -l #{escape(service)} status 2> /dev/null |grep -wx '^state.*online$'"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Cron < Specinfra::Command::Base::Cron
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
2
|
+
class << self
|
3
|
+
def check_cron_entry(user, entry)
|
4
|
+
entry_escaped = entry.gsub(/\*/, '\\*').gsub(/\[/, '\\[').gsub(/\]/, '\\]')
|
5
|
+
if user.nil?
|
6
|
+
"crontab -l | grep -- #{escape(entry_escaped)}"
|
7
|
+
else
|
8
|
+
"crontab -l #{escape(user)} | grep -- #{escape(entry_escaped)}"
|
9
|
+
end
|
8
10
|
end
|
9
11
|
end
|
10
12
|
end
|
@@ -1,17 +1,19 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::File < Specinfra::Command::Base::File
|
2
|
-
|
3
|
-
from
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
2
|
+
class << self
|
3
|
+
def check_contains_within(file, expected_pattern, from=nil, to=nil)
|
4
|
+
from ||= '1'
|
5
|
+
to ||= '$'
|
6
|
+
sed = "sed -n #{escape(from)},#{escape(to)}p #{escape(file)}"
|
7
|
+
checker_with_regexp = check_file_contains_with_regexp("/dev/stdin", expected_pattern)
|
8
|
+
checker_with_fixed = check_file_contains_with_fixed_strings("/dev/stdin", expected_pattern)
|
9
|
+
"#{sed} | #{checker_with_regexp} || #{sed} | #{checker_with_fixed}"
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
def check_is_accessible_by_user(file, user, access)
|
13
|
+
# http://docs.oracle.com/cd/E23823_01/html/816-5166/su-1m.html
|
14
|
+
## No need for login shell as it seems that behavior as superuser is favorable for us, but needs
|
15
|
+
## to be better tested under real solaris env
|
16
|
+
"su #{user} -c \"test -#{access} #{file}\""
|
17
|
+
end
|
16
18
|
end
|
17
19
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Group < Specinfra::Command::Base::Group
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_has_gid(group, gid)
|
4
|
+
regexp = "^#{group}:"
|
5
|
+
"getent group | grep -- #{escape(regexp)} | cut -f 3 -d ':' | grep -w -- #{escape(gid)}"
|
6
|
+
end
|
5
7
|
end
|
6
8
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Host < Specinfra::Command::Base::Host
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_reachable(host, port, proto, timeout)
|
4
|
+
if port.nil?
|
5
|
+
"ping -n #{escape(host)} #{escape(timeout)}"
|
6
|
+
else
|
7
|
+
"nc -vvvvz#{escape(proto[0].chr)} -w #{escape(timeout)} #{escape(host)} #{escape(port)}"
|
8
|
+
end
|
7
9
|
end
|
8
10
|
end
|
9
11
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Ipfilter < Specinfra::Command::Base::Ipfilter
|
2
|
-
|
3
|
-
|
2
|
+
class << self
|
3
|
+
def check_has_rule(rule)
|
4
|
+
"ipfstat -io 2> /dev/null | grep -- #{escape(rule)}"
|
5
|
+
end
|
4
6
|
end
|
5
7
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Ipnat < Specinfra::Command::Base::Ipnat
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self
|
3
|
+
def check_has_rule(rule)
|
4
|
+
regexp = "^#{rule}$"
|
5
|
+
"ipnat -l 2> /dev/null | grep -- #{escape(regexp)}"
|
6
|
+
end
|
5
7
|
end
|
6
8
|
end
|
7
9
|
|
@@ -1,10 +1,12 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Package < Specinfra::Command::Base::Package
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_installed(package, version=nil)
|
4
|
+
cmd = "pkg list -H #{escape(package)} 2> /dev/null"
|
5
|
+
if version
|
6
|
+
cmd = "#{cmd} | grep -qw -- #{escape(version)}"
|
7
|
+
end
|
8
|
+
cmd
|
6
9
|
end
|
7
|
-
cmd
|
8
10
|
end
|
9
11
|
end
|
10
12
|
|
@@ -1,11 +1,13 @@
|
|
1
1
|
class Specinfra::Command::Solaris::Base::Port < Specinfra::Command::Base::Port
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
2
|
+
class << self
|
3
|
+
def check_is_listening(port, opts=nil)
|
4
|
+
regexp = "\\.#{port} "
|
5
|
+
"netstat -an 2> /dev/null | grep -- LISTEN | grep -- #{escape(regexp)}"
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def check_is_listening_with_protocol(port, protocol)
|
9
|
+
regexp = ".*\\.#{port} "
|
10
|
+
"netstat -an -P #{escape(protocol)} 2> /dev/null | grep -- LISTEN | grep -- #{escape(regexp)}"
|
11
|
+
end
|
10
12
|
end
|
11
13
|
end
|