nasl-pedant 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. data/Rakefile +38 -0
  2. data/bin/pedant +1 -1
  3. data/lib/pedant.rb +3 -1
  4. data/lib/pedant/check.rb +20 -12
  5. data/lib/pedant/checks/conditional_or_loop_is_empty.rb +1 -1
  6. data/lib/pedant/checks/contains_ip_address_literals.rb +1 -1
  7. data/lib/pedant/checks/contains_no_carriage_returns.rb +1 -1
  8. data/lib/pedant/checks/contains_no_tabs.rb +1 -1
  9. data/lib/pedant/checks/contains_registration_section.rb +10 -4
  10. data/lib/pedant/checks/contains_unreachable_code.rb +2 -2
  11. data/lib/pedant/checks/ends_with_newline.rb +1 -1
  12. data/lib/pedant/checks/{files_parse_without_error.rb → files_parse_without_errors.rb} +1 -1
  13. data/lib/pedant/checks/local_variable_unused.rb +51 -0
  14. data/lib/pedant/checks/parse_test_code.rb +1 -1
  15. data/lib/pedant/checks/plugin_type_not_specified.rb +4 -3
  16. data/lib/pedant/checks/script_category.rb +111 -0
  17. data/lib/pedant/checks/script_family_not_specified.rb +53 -16
  18. data/lib/pedant/checks/script_id.rb +115 -0
  19. data/lib/pedant/checks/script_name.rb +133 -0
  20. data/lib/pedant/checks/script_summary.rb +142 -0
  21. data/lib/pedant/cli.rb +41 -31
  22. data/lib/pedant/command.rb +16 -29
  23. data/lib/pedant/commands/check.rb +105 -6
  24. data/lib/pedant/commands/test.rb +24 -2
  25. data/lib/pedant/knowledge_base.rb +1 -1
  26. data/lib/pedant/test.rb +5 -5
  27. data/lib/pedant/version.rb +1 -1
  28. data/pedant.gemspec +33 -6
  29. data/test/test_helper.rb +26 -0
  30. data/test/unit/checks/test_conditional_or_loop_is_empty.rb +1 -1
  31. data/test/unit/checks/test_contains_ip_address_literals.rb +1 -1
  32. data/test/unit/checks/test_contains_no_carriage_returns.rb +1 -1
  33. data/test/unit/checks/test_contains_no_tabs.rb +1 -1
  34. data/test/unit/checks/test_contains_registration_section.rb +17 -1
  35. data/test/unit/checks/test_contains_unreachable_code.rb +11 -1
  36. data/test/unit/checks/test_ends_with_newline.rb +1 -1
  37. data/test/unit/checks/test_plugin_type_not_specified.rb +9 -1
  38. data/test/unit/checks/test_script_family_not_specified.rb +54 -13
  39. metadata +30 -20
data/Rakefile CHANGED
@@ -1,3 +1,29 @@
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ ################################################################################
26
+
1
27
  $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
2
28
 
3
29
  require 'bundler/gem_tasks'
@@ -17,4 +43,16 @@ task :build => :compile do
17
43
  system "gem build pedant.gemspec"
18
44
  end
19
45
 
46
+ task :tag_and_bag do
47
+ system "git tag -a v#{Pedant::VERSION} -m 'version #{Pedant::VERSION}'"
48
+ system "git push --tags"
49
+ system "git checkout master"
50
+ #system "git merge #{Pedant::VERSION}"
51
+ system "git push"
52
+ end
53
+
54
+ task :release => [:tag_and_bag, :build] do
55
+ system "gem push #{Pedant::APP_NAME}-#{Pedant::VERSION}.gem"
56
+ end
57
+
20
58
  task :default => :compile
data/bin/pedant CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  ################################################################################
4
- # Copyright (c) 2011, Mak Kolybabi
4
+ # Copyright (c) 2011-2014, Tenable Network Security
5
5
  # All rights reserved.
6
6
  #
7
7
  # Redistribution and use in source and binary forms, with or without
data/lib/pedant.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -27,6 +27,7 @@
27
27
  require 'nasl'
28
28
  require 'pathname'
29
29
  require 'rainbow'
30
+ require 'rainbow/ext/string'
30
31
 
31
32
  module Pedant
32
33
  def self.root
@@ -46,6 +47,7 @@ module Pedant
46
47
  autoload :Command, 'pedant/command'
47
48
  autoload :KnowledgeBase, 'pedant/knowledge_base'
48
49
  autoload :Test, 'pedant/test'
50
+ autoload :VERSION, 'pedant/version'
49
51
  end
50
52
 
51
53
  $LOAD_PATH.unshift(Pedant.lib.to_s)
data/lib/pedant/check.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -29,12 +29,12 @@ module Pedant
29
29
  attr_reader :result
30
30
 
31
31
  @@statuses = {
32
- :died => 'DIED'.color(:red),
33
- :fail => 'FAIL'.color(:red),
34
- :pass => 'PASS'.color(:green),
35
- :skip => 'SKIP'.color(:green),
36
- :warn => 'WARN'.color(:yellow),
37
- :void => 'VOID'.color(:magenta)
32
+ :died => Rainbow('DIED').color(:red),
33
+ :fail => Rainbow('FAIL').color(:red),
34
+ :pass => Rainbow('PASS').color(:green),
35
+ :skip => Rainbow('SKIP').color(:green),
36
+ :warn => Rainbow('WARN').color(:yellow),
37
+ :void => Rainbow('VOID').color(:magenta)
38
38
  }
39
39
 
40
40
  @@levels = [:error, :warn, :info]
@@ -57,6 +57,10 @@ module Pedant
57
57
  end
58
58
  end
59
59
 
60
+ def self.list
61
+ all.map{ |cls| cls.friendly_name }.sort
62
+ end
63
+
60
64
  def self.all
61
65
  (@_all ||= [])
62
66
  end
@@ -88,7 +92,11 @@ module Pedant
88
92
  end
89
93
 
90
94
  def report(level, text=nil)
91
- if !text.nil?
95
+ unless text.nil?
96
+ if @@levels.index(level).nil?
97
+ raise "Reporting level #{level} is not known."
98
+ end
99
+
92
100
  @report << [level, text]
93
101
  return
94
102
  end
@@ -101,14 +109,14 @@ module Pedant
101
109
  msg << "\n" unless msg.empty?
102
110
 
103
111
  # Format the check's result.
104
- msg = "[#{@@statuses[@result]}] #{self.name}\n#{msg}"
112
+ msg = "[#{@@statuses[@result]}] #{self.class.friendly_name}\n#{msg}"
105
113
 
106
114
  return msg
107
115
  end
108
116
 
109
- def name
110
- # Mangle the classes name to be more user-friendly.
111
- self.class.name.gsub(/.*::/, '').gsub(/^Check/, '').gsub(/([A-Z][^A-Z]*)/, ' \1').strip
117
+ def self.friendly_name
118
+ # Mangle the class name to be more user-friendly.
119
+ self.name.gsub(/.*::/, '').gsub(/^Check/, '').gsub(/[A-Z][^A-Z]*/, ' \&').strip
112
120
  end
113
121
 
114
122
  def fail
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -41,7 +41,7 @@ module Pedant
41
41
 
42
42
  # Find the registration If statement.
43
43
  regs = tree.all(:If).select do |node|
44
- (node.cond.is_a?(Nasl::Lvalue) && node.cond.ident.name == 'description')
44
+ (node.cond.is_a?(Nasl::Lvalue) && node.cond.ident.name == 'description' && node.cond.indexes == [])
45
45
  end
46
46
 
47
47
  # Ensure there's a registration section.
@@ -82,8 +82,14 @@ module Pedant
82
82
  return fail
83
83
  end
84
84
 
85
- unless statement.name.name == 'exit'
86
- report(:error, "The registration section ends with a call to #{statement.name.name}, not exit as expected.")
85
+ unless statement.name.indexes == []
86
+ report(:error, "The registration section ends with a call to something other than exit.")
87
+ report(:error, statement.context(reg))
88
+ return fail
89
+ end
90
+
91
+ unless statement.name.ident.name == 'exit'
92
+ report(:error, "The registration section ends with a call to #{statement.name.ident.name}, not exit as expected.")
87
93
  report(:error, statement.context(reg))
88
94
  return fail
89
95
  end
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -36,7 +36,7 @@ module Pedant
36
36
  # Check if the Node is capable of jumping out of the Block, without
37
37
  # resuming where it left off (i.e., Call). The exception is exit(),
38
38
  # which is a builtin Function that terminates execution.
39
- if node.is_a?(Nasl::Break) || node.is_a?(Nasl::Continue) || node.is_a?(Nasl::Return) || (node.is_a?(Nasl::Call) && node.name.name == 'exit')
39
+ if node.is_a?(Nasl::Break) || node.is_a?(Nasl::Continue) || node.is_a?(Nasl::Return) || (node.is_a?(Nasl::Call) && node.name.ident.name == 'exit' && node.name.indexes == [])
40
40
  # If this is not the final node in the list, then there is
41
41
  # absolutely no way for the later nodes to be accessed.
42
42
  if node != list.last
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -0,0 +1,51 @@
1
+ ################################################################################
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ ################################################################################
26
+
27
+ module Pedant
28
+ class CheckLocalVariableUnused < Check
29
+ def self.requires
30
+ super + [:trees]
31
+ end
32
+
33
+ def check(file, tree)
34
+ def check_function(id, blk)
35
+ report(:warn, "Function #{id.name} was not analyzed since this check is unfinished.")
36
+ end
37
+
38
+ # Local variable statements can technically occur anywhere, they only
39
+ # create new variables when found in functions.
40
+ tree.all(:Function).each { |fn| check_function(fn.name, fn.body) }
41
+ end
42
+
43
+ def run
44
+ # This check will pass by default.
45
+ pass
46
+
47
+ # Run this check on the tree from every file.
48
+ @kb[:trees].each { |file, tree| check(file, tree) }
49
+ end
50
+ end
51
+ end
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -1,5 +1,5 @@
1
1
  ################################################################################
2
- # Copyright (c) 2011-2012, Mak Kolybabi
2
+ # Copyright (c) 2011-2014, Tenable Network Security
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -39,7 +39,8 @@ module Pedant
39
39
  tree = @kb[:trees][@kb[:main]]
40
40
 
41
41
  tree.all(:Call).each do |node|
42
- next unless node.name.name == 'script_set_attribute'
42
+ next unless node.name.ident.name == 'script_set_attribute'
43
+ next unless node.name.indexes == []
43
44
  next unless node.arg.has_key? 'attribute'
44
45
 
45
46
  # Pull out the attribute argument.
@@ -52,7 +53,7 @@ module Pedant
52
53
  next if !arg.is_a? Nasl::String
53
54
 
54
55
  # Ensure that the plugin type is valid.
55
- unless ['combined', 'local', 'reputation', 'remote', 'settings', 'thirdparty'].include? arg.text
56
+ unless ['combined', 'local', 'reputation', 'remote', 'settings', 'summary', 'thirdparty'].include? arg.text
56
57
  report(:info, "Plugin is of unknown type #{arg.text}:\n#{arg.context(node)}")
57
58
  return fail
58
59
  end
@@ -0,0 +1,111 @@
1
+ ################################################################################
2
+ # Copyright (c) 2012, Mak Kolybabi
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # 1. Redistributions of source code must retain the above copyright notice, this
9
+ # list of conditions and the following disclaimer.
10
+ #
11
+ # 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
19
+ # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20
+ # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
21
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
22
+ # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
23
+ # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25
+ ################################################################################
26
+
27
+ module Pedant
28
+ class CheckScriptCategory < Check
29
+ def self.requires
30
+ super + [:main, :trees]
31
+ end
32
+
33
+ def run
34
+ # This check only applies to plugins.
35
+ return skip unless @kb[:main].extname == '.nasl'
36
+
37
+ sc_nodes = []
38
+ tree = @kb[:trees][@kb[:main]]
39
+
40
+ tree.all(:Call).each do |node|
41
+ next unless node.name.ident.name == 'script_category'
42
+ next unless node.name.indexes == []
43
+ sc_nodes << node
44
+ end
45
+
46
+ if sc_nodes.length == 0
47
+ report(:error, "Plugin does not specify a script_category.")
48
+ return fail
49
+ elsif sc_nodes.length > 1
50
+ report(:error, "Plugin specifies multiple script categories:")
51
+ sc_nodes.each { |call| report(:error, call.context()) }
52
+ return fail
53
+ end
54
+
55
+ sc_node = sc_nodes.first
56
+
57
+ if sc_node.args.empty?
58
+ report(:error, "script_category() was called with no arguments:\n#{sc_node.context()}")
59
+ return fail
60
+ end
61
+
62
+ if sc_node.args.length > 1
63
+ report(:error, "script_category() was called with too many arguments:\n#{sc_node.context()}")
64
+ return fail
65
+ end
66
+
67
+ # Pull out argument
68
+ arg = sc_node.args.first.expr
69
+
70
+ unless sc_node.args.first.expr.is_a? Nasl::Lvalue
71
+ report(
72
+ :error,
73
+ "script_category() was called with the wrong type of argument.\n" +
74
+ "A variable (not a string literal) starting with ACT_ must be provided:\n" +
75
+ arg.context(sc_node)
76
+ )
77
+ return fail
78
+ end
79
+
80
+ # Ensure that the script category is valid.
81
+ unless [
82
+ "ACT_INIT",
83
+ "ACT_SCANNER",
84
+ "ACT_SETTINGS",
85
+ "ACT_GATHER_INFO",
86
+ "ACT_ATTACK",
87
+ "ACT_MIXED",
88
+ "ACT_DESTRUCTIVE_ATTACK",
89
+ "ACT_COMPLIANCE_CHECK",
90
+ "ACT_PATCH_SETUP",
91
+ "ACT_PATCH_APPLY",
92
+ "ACT_PATCH_POST_APPLY",
93
+ "ACT_THIRD_PARTY_INFO",
94
+ "ACT_DENIAL",
95
+ "ACT_KILL_HOST",
96
+ "ACT_FLOOD",
97
+ "ACT_END"
98
+ ].include? arg.ident.name
99
+ report(
100
+ :error,
101
+ "Plugin belongs to unknown category #{arg.ident.name}:\n" +
102
+ arg.context(sc_node)
103
+ )
104
+ return fail
105
+ end
106
+
107
+ report(:info, "Plugin belongs to script category #{arg.ident.name}:\n#{arg.context(sc_node)}")
108
+ pass
109
+ end
110
+ end
111
+ end
@@ -39,7 +39,8 @@ module Pedant
39
39
  tree = @kb[:trees][@kb[:main]]
40
40
 
41
41
  tree.all(:Call).each do |node|
42
- next unless node.name.name == 'script_family'
42
+ next unless node.name.ident.name == 'script_family'
43
+ next unless node.name.indexes == []
43
44
  next if node.args.empty?
44
45
  next unless node.args.first.expr.is_a? Nasl::String
45
46
 
@@ -47,21 +48,57 @@ module Pedant
47
48
  arg = node.args.first.expr
48
49
 
49
50
  # Ensure that the script family is valid.
50
- unless ["AIX Local Security Checks", "Backdoors", "Brute force attacks",
51
- "CentOS Local Security Checks", "CGI abuses", "CISCO", "Databases",
52
- "Debian Local Security Checks", "Default Unix Accounts",
53
- "Denial of Service", "DNS", "Fedora Local Security Checks",
54
- "Finger abuses", "Firewalls", "FTP", "Gain a shell remotely",
55
- "General", "Gentoo Local Security Checks", "HP-UX Local Security Checks",
56
- "MacOS X Local Security Checks", "Mandriva Local Security Checks",
57
- "Misc.", "Netware", "Peer-To-Peer File Sharing", "Port scanners",
58
- "Red Hat Local Security Checks", "RPC", "SCADA", "Service detection",
59
- "Settings", "Slackware Local Security Checks", "SMTP problems",
60
- "SNMP", "Solaris Local Security Checks", "SuSE Local Security Checks",
61
- "Ubuntu Local Security Checks", "VMware ESX Local Security Checks",
62
- "Web Servers", "Windows"].include? arg.text
51
+ unless [
52
+ "AIX Local Security Checks",
53
+ "Backdoors",
54
+ "Brute force attacks",
55
+ "CentOS Local Security Checks",
56
+ "CGI abuses",
57
+ "CGI abuses : XSS",
58
+ "CISCO",
59
+ "Databases",
60
+ "Debian Local Security Checks",
61
+ "Default Unix Accounts",
62
+ "Denial of Service",
63
+ "DNS",
64
+ "Fedora Local Security Checks",
65
+ #"Finger abuses", # removed december 2011
66
+ "Firewalls",
67
+ "FreeBSD Local Security Checks",
68
+ "FTP",
69
+ "Gain a shell remotely",
70
+ "General",
71
+ "Gentoo Local Security Checks",
72
+ "HP-UX Local Security Checks",
73
+ "Junos Local Security Checks",
74
+ "MacOS X Local Security Checks",
75
+ "Mandriva Local Security Checks",
76
+ "Misc.",
77
+ "Mobile Devices",
78
+ "Netware",
79
+ "Peer-To-Peer File Sharing",
80
+ "Policy Compliance",
81
+ "Port scanners",
82
+ "Red Hat Local Security Checks",
83
+ "RPC",
84
+ "SCADA",
85
+ "Scientific Linux Local Security Checks",
86
+ "Service detection",
87
+ "Settings",
88
+ "Slackware Local Security Checks",
89
+ "SMTP problems",
90
+ "SNMP",
91
+ "Solaris Local Security Checks",
92
+ "SuSE Local Security Checks",
93
+ "Ubuntu Local Security Checks",
94
+ "VMware ESX Local Security Checks",
95
+ "Web Servers",
96
+ "Windows",
97
+ "Windows : Microsoft Bulletins",
98
+ "Windows : User management"
99
+ ].include? arg.text
63
100
 
64
- report(:info, "Plugin belongs to unknown #{arg.text}:\n#{arg.context(node)}")
101
+ report(:info, "Plugin belongs to unknown family #{arg.text}:\n#{arg.context(node)}")
65
102
  return fail
66
103
  end
67
104
 
@@ -78,7 +115,7 @@ module Pedant
78
115
  report(:info, "Plugin belongs to script family #{arg.text}:\n#{arg.context(call)}")
79
116
  pass
80
117
  else
81
- report(:error, "Plugin specifies multiple script family's.")
118
+ report(:error, "Plugin specifies multiple script families.")
82
119
  args.each { |arg, call| report(:error, arg.context(call)) }
83
120
  fail
84
121
  end