Files
metasploit-gs/api/Msf/OptionContainer.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

1991 lines
70 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Msf::OptionContainer
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../css/style.css" type="text/css" />
<link rel="stylesheet" href="../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Msf::OptionContainer";
relpath = '../';
</script>
<script type="text/javascript" charset="utf-8" src="../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../_index.html">Index (O)</a> &raquo;
<span class='title'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span>
&raquo;
<span class="title">OptionContainer</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Msf::OptionContainer
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Hash</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Hash</li>
<li class="next">Msf::OptionContainer</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/option_container.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>The options purpose in life is to associate named options with arbitrary values at the most simplistic level. Each <span class='object_link'><a href="Module.html" title="Msf::Module (class)">Module</a></span> contains an OptionContainer that is used to hold the various options that the module depends on. Example of options that are stored in the OptionContainer are rhost and rport for payloads or exploits that need to connect to a host and port, for instance.</p>
<p>The core supported option types are:</p>
<ul><li>
<p><span class='object_link'><a href="OptString.html" title="Msf::OptString (class)">OptString</a></span> - Multi-byte character string</p>
</li><li>
<p><span class='object_link'><a href="OptRaw.html" title="Msf::OptRaw (class)">OptRaw</a></span> - Multi-byte raw string</p>
</li><li>
<p><span class='object_link'><a href="OptBool.html" title="Msf::OptBool (class)">OptBool</a></span> - Boolean true or false indication</p>
</li><li>
<p><span class='object_link'><a href="OptPort.html" title="Msf::OptPort (class)">OptPort</a></span> - TCP/UDP service port</p>
</li><li>
<p><span class='object_link'><a href="OptAddress.html" title="Msf::OptAddress (class)">OptAddress</a></span> - IP address or hostname</p>
</li><li>
<p><span class='object_link'><a href="OptPath.html" title="Msf::OptPath (class)">OptPath</a></span> - Path name on disk or an Object ID</p>
</li><li>
<p><span class='object_link'><a href="OptInt.html" title="Msf::OptInt (class)">OptInt</a></span> - An integer value</p>
</li><li>
<p><span class='object_link'><a href="OptFloat.html" title="Msf::OptFloat (class)">OptFloat</a></span> - A float value</p>
</li><li>
<p><span class='object_link'><a href="OptEnum.html" title="Msf::OptEnum (class)">OptEnum</a></span> - Select from a set of valid values</p>
</li><li>
<p><span class='object_link'><a href="OptAddressRange.html" title="Msf::OptAddressRange (class)">OptAddressRange</a></span> - A subnet or range of addresses</p>
</li><li>
<p><span class='object_link'><a href="OptRegexp.html" title="Msf::OptRegexp (class)">OptRegexp</a></span> - Valid Ruby regular expression</p>
</li></ul>
</div>
</div>
<div class="tags">
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#groups-instance_method" title="#groups (instance method)">#<strong>groups</strong> &#x21d2; Hash&lt;String, Msf::OptionGroup&gt; </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
</ul>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#[]-instance_method" title="#[] (instance method)">#<strong>[]</strong>(name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Return the value associated with the supplied name.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_advanced_options-instance_method" title="#add_advanced_options (instance method)">#<strong>add_advanced_options</strong>(opts, owner = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Alias to add advanced options that sets the proper state flag.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_evasion_options-instance_method" title="#add_evasion_options (instance method)">#<strong>add_evasion_options</strong>(opts, owner = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Alias to add evasion options that sets the proper state flag.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_group-instance_method" title="#add_group (instance method)">#<strong>add_group</strong>(option_group) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds an option group to the container.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_option-instance_method" title="#add_option (instance method)">#<strong>add_option</strong>(option, name = nil, owner = nil, advanced = false, evasion = false) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds an option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_options-instance_method" title="#add_options (instance method)">#<strong>add_options</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Adds one or more options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_options_array-instance_method" title="#add_options_array (instance method)">#<strong>add_options_array</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Add options from an array of option instances or arrays.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#add_options_hash-instance_method" title="#add_options_hash (instance method)">#<strong>add_options_hash</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Add options from a hash of names.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#each-instance_method" title="#each (instance method)">#<strong>each</strong>(&amp;block) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Overrides the builtin each operator to avoid the following exception on Ruby 1.9.2+ “cant add a new key into hash during iteration”.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#each_option-instance_method" title="#each_option (instance method)">#<strong>each_option</strong>(&amp;block) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Enumerates each option name.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get-instance_method" title="#get (instance method)">#<strong>get</strong>(name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Return the option associated with the supplied name.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#has_advanced_options%3F-instance_method" title="#has_advanced_options? (instance method)">#<strong>has_advanced_options?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns whether or not the container has any advanced options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#has_evasion_options%3F-instance_method" title="#has_evasion_options? (instance method)">#<strong>has_evasion_options?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns whether or not the container has any evasion options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#has_options%3F-instance_method" title="#has_options? (instance method)">#<strong>has_options?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns whether or not the container has any options, excluding advanced (and evasions).</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(opts = {}) &#x21d2; OptionContainer </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Merges in the supplied options and converts them to a OptBase as necessary.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#merge_sort-instance_method" title="#merge_sort (instance method)">#<strong>merge_sort</strong>(other_container) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Merges the options in this container with another option container and returns the sorted results.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#options_used_to_s-instance_method" title="#options_used_to_s (instance method)">#<strong>options_used_to_s</strong>(datastore) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Creates string of options that were used from the datastore in VAR=VAL format separated by commas.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#remove_group-instance_method" title="#remove_group (instance method)">#<strong>remove_group</strong>(group_name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Removes an option group from the container by name.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#remove_option-instance_method" title="#remove_option (instance method)">#<strong>remove_option</strong>(name) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Removes an option.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#sorted-instance_method" title="#sorted (instance method)">#<strong>sorted</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Return the sorted array of options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#validate-instance_method" title="#validate (instance method)">#<strong>validate</strong>(datastore) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Make sures that each of the options has a value of a compatible format and that all the required options are set.</p>
</div></span>
</li>
</ul>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(opts = {}) &#x21d2; <tt><span class='object_link'><a href="" title="Msf::OptionContainer (class)">OptionContainer</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Merges in the supplied options and converts them to a OptBase as necessary.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
53
54
55
56
57</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 53</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_groups'>groups</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_add_options'>add_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id="groups=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="groups-instance_method">
#<strong>groups</strong> &#x21d2; <tt>Hash&lt;String, <span class='object_link'><a href="OptionGroup.html" title="Msf::OptionGroup (class)">Msf::OptionGroup</a></span>&gt;</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash&lt;String, <span class='object_link'><a href="OptionGroup.html" title="Msf::OptionGroup (class)">Msf::OptionGroup</a></span>&gt;</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
336
337
338</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 336</span>
<span class='kw'>def</span> <span class='id identifier rubyid_groups'>groups</span>
<span class='ivar'>@groups</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="[]-instance_method">
#<strong>[]</strong>(name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Return the value associated with the supplied name.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
69
70
71</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 69</span>
<span class='kw'>def</span> <span class='op'>[]</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_advanced_options-instance_method">
#<strong>add_advanced_options</strong>(opts, owner = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Alias to add advanced options that sets the proper state flag.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
183
184
185
186
187</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 183</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_advanced_options'>add_advanced_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_add_options'>add_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_evasion_options-instance_method">
#<strong>add_evasion_options</strong>(opts, owner = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Alias to add evasion options that sets the proper state flag.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
192
193
194
195
196</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 192</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_evasion_options'>add_evasion_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_add_options'>add_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_group-instance_method">
#<strong>add_group</strong>(option_group) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds an option group to the container</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>option_group</span>
<span class='type'>(<tt><span class='object_link'><a href="OptionGroup.html" title="Msf::OptionGroup (class)">Msf::OptionGroup</a></span></tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
324
325
326</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 324</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_group'>add_group</span><span class='lparen'>(</span><span class='id identifier rubyid_option_group'>option_group</span><span class='rparen'>)</span>
<span class='id identifier rubyid_groups'>groups</span><span class='lbracket'>[</span><span class='id identifier rubyid_option_group'>option_group</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_option_group'>option_group</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_option-instance_method">
#<strong>add_option</strong>(option, name = nil, owner = nil, advanced = false, evasion = false) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds an option.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 162</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_option'>add_option</span><span class='lparen'>(</span><span class='id identifier rubyid_option'>option</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
<span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_shift'>shift</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="OptBase.html" title="Msf::OptBase (class)">OptBase</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_option'>option</span> <span class='op'>=</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The option named </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'> did not come in a compatible format.</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span>
<span class='id identifier rubyid_caller'>caller</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='id identifier rubyid_advanced'>advanced</span>
<span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='id identifier rubyid_evasion'>evasion</span>
<span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='id identifier rubyid_owner'>owner</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_store'>store</span><span class='lparen'>(</span><span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_options-instance_method">
#<strong>add_options</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Adds one or more options.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
131
132
133
134
135
136
137
138
139</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 131</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_options'>add_options</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
<span class='id identifier rubyid_add_options_array'>add_options_array</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_add_options_hash'>add_options_hash</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_options_array-instance_method">
#<strong>add_options_array</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Add options from an array of option instances or arrays.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
153
154
155
156
157</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 153</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_options_array'>add_options_array</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='id identifier rubyid_add_option'>add_option</span><span class='lparen'>(</span><span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="add_options_hash-instance_method">
#<strong>add_options_hash</strong>(opts, owner = nil, advanced = false, evasion = false) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Add options from a hash of names.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
144
145
146
147
148</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 144</span>
<span class='kw'>def</span> <span class='id identifier rubyid_add_options_hash'>add_options_hash</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span> <span class='op'>=</span> <span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span> <span class='op'>=</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='id identifier rubyid_opts'>opts</span><span class='period'>.</span><span class='id identifier rubyid_each_pair'>each_pair</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='id identifier rubyid_add_option'>add_option</span><span class='lparen'>(</span><span class='id identifier rubyid_opt'>opt</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_owner'>owner</span><span class='comma'>,</span> <span class='id identifier rubyid_advanced'>advanced</span><span class='comma'>,</span> <span class='id identifier rubyid_evasion'>evasion</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="each-instance_method">
#<strong>each</strong>(&amp;block) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Overrides the builtin each operator to avoid the following exception on Ruby 1.9.2+</p>
<pre class="code ruby"><code class="ruby"><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>can&#39;t add a new key into hash during iteration</span><span class='tstring_end'>&quot;</span></span>
</code></pre>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
297
298
299
300
301
302
303</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 297</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='id identifier rubyid_list'>list</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_keys'>keys</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_sidx'>sidx</span><span class='op'>|</span>
<span class='id identifier rubyid_list'>list</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span><span class='id identifier rubyid_sidx'>sidx</span><span class='comma'>,</span> <span class='kw'>self</span><span class='lbracket'>[</span><span class='id identifier rubyid_sidx'>sidx</span><span class='rbracket'>]</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_list'>list</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="each_option-instance_method">
#<strong>each_option</strong>(&amp;block) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Enumerates each option name</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
289
290
291</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 289</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each_option'>each_option</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='id identifier rubyid_each_pair'>each_pair</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='id identifier rubyid_block'>block</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get-instance_method">
#<strong>get</strong>(name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Return the option associated with the supplied name.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
76
77
78
79
80
81</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 76</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='kw'>return</span> <span class='id identifier rubyid_fetch'>fetch</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>rescue</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="has_advanced_options?-instance_method">
#<strong>has_advanced_options?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns whether or not the container has any advanced options.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
100
101
102
103
104
105
106</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 100</span>
<span class='kw'>def</span> <span class='id identifier rubyid_has_advanced_options?'>has_advanced_options?</span>
<span class='id identifier rubyid_each_option'>each_option</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_advanced?'>advanced?</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="has_evasion_options?-instance_method">
#<strong>has_evasion_options?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns whether or not the container has any evasion options.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
112
113
114
115
116
117
118</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 112</span>
<span class='kw'>def</span> <span class='id identifier rubyid_has_evasion_options?'>has_evasion_options?</span>
<span class='id identifier rubyid_each_option'>each_option</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_evasion?'>evasion?</span> <span class='op'>==</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="has_options?-instance_method">
#<strong>has_options?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns whether or not the container has any options, excluding advanced (and evasions).</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
87
88
89
90
91
92
93
94</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 87</span>
<span class='kw'>def</span> <span class='id identifier rubyid_has_options?'>has_options?</span>
<span class='id identifier rubyid_each_option'>each_option</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='kw'>return</span> <span class='kw'>true</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_opt'>opt</span><span class='period'>.</span><span class='id identifier rubyid_advanced?'>advanced?</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span>
<span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="merge_sort-instance_method">
#<strong>merge_sort</strong>(other_container) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Merges the options in this container with another option container and returns the sorted results.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
309
310
311
312
313
314
315
316
317
318
319</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 309</span>
<span class='kw'>def</span> <span class='id identifier rubyid_merge_sort'>merge_sort</span><span class='lparen'>(</span><span class='id identifier rubyid_other_container'>other_container</span><span class='rparen'>)</span>
<span class='id identifier rubyid_result'>result</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dup'>dup</span>
<span class='id identifier rubyid_other_container'>other_container</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_opt'>opt</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_result'>result</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_opt'>opt</span>
<span class='kw'>end</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_result'>result</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="options_used_to_s-instance_method">
#<strong>options_used_to_s</strong>(datastore) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Creates string of options that were used from the datastore in VAR=VAL format separated by commas.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
273
274
275
276
277
278
279
280
281
282
283
284</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 273</span>
<span class='kw'>def</span> <span class='id identifier rubyid_options_used_to_s'>options_used_to_s</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span>
<span class='id identifier rubyid_used'>used</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_each_pair'>each_pair</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_used'>used</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>, </span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_used'>used</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_used'>used</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_name'>name</span><span class='embexpr_end'>}</span><span class='tstring_content'>=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='id identifier rubyid_used'>used</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="remove_group-instance_method">
#<strong>remove_group</strong>(group_name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Removes an option group from the container by name</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>group_name</span>
<span class='type'>(<tt>String</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
331
332
333</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 331</span>
<span class='kw'>def</span> <span class='id identifier rubyid_remove_group'>remove_group</span><span class='lparen'>(</span><span class='id identifier rubyid_group_name'>group_name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_groups'>groups</span><span class='period'>.</span><span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_group_name'>group_name</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="remove_option-instance_method">
#<strong>remove_option</strong>(name) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Removes an option.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>name</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>the option name</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
124
125
126</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 124</span>
<span class='kw'>def</span> <span class='id identifier rubyid_remove_option'>remove_option</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_delete'>delete</span><span class='lparen'>(</span><span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="sorted-instance_method">
#<strong>sorted</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Return the sorted array of options.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
62
63
64</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 62</span>
<span class='kw'>def</span> <span class='id identifier rubyid_sorted'>sorted</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_sort'>sort</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="validate-instance_method">
#<strong>validate</strong>(datastore) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Make sures that each of the options has a value of a compatible format and that all the required options are set.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/option_container.rb', line 201</span>
<span class='kw'>def</span> <span class='id identifier rubyid_validate'>validate</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span>
<span class='comment'># First mutate the datastore and normalize all valid values before validating permutations of RHOST/etc.
</span> <span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>datastore:</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_val'>val</span> <span class='op'>=</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_normalize'>normalize</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='rparen'>)</span> <span class='op'>!=</span> <span class='kw'>nil</span>
<span class='comment'># This *will* result in a module that previously used the
</span> <span class='comment'># global datastore to have its local datastore set, which
</span> <span class='comment'># means that changing the global datastore and re-running
</span> <span class='comment'># the same module will now use the newly-normalized local
</span> <span class='comment'># datastore value instead. This is mostly mitigated by
</span> <span class='comment'># forcing a clone through mod.replicant, but can break
</span> <span class='comment'># things in corner cases.
</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_val'>val</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='comment'># Validate all permutations of rhost combinations
</span> <span class='kw'>if</span> <span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_blank?'>blank?</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='kw'>self</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_required'>required</span><span class='rparen'>)</span>
<span class='id identifier rubyid_error_options'>error_options</span> <span class='op'>=</span> <span class='const'>Set</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='id identifier rubyid_error_reasons'>error_reasons</span> <span class='op'>=</span> <span class='const'>Hash</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_hash'>hash</span><span class='comma'>,</span> <span class='id identifier rubyid_key'>key</span><span class='op'>|</span>
<span class='id identifier rubyid_hash'>hash</span><span class='lbracket'>[</span><span class='id identifier rubyid_key'>key</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_rhosts_walker'>rhosts_walker</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="RhostsWalker.html" title="Msf::RhostsWalker (class)">RhostsWalker</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="RhostsWalker.html#initialize-instance_method" title="Msf::RhostsWalker#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span>
<span class='id identifier rubyid_rhosts_count'>rhosts_count</span> <span class='op'>=</span> <span class='id identifier rubyid_rhosts_walker'>rhosts_walker</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_rhosts_walker'>rhosts_walker</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span>
<span class='id identifier rubyid_errors'>errors</span> <span class='op'>=</span> <span class='id identifier rubyid_rhosts_walker'>rhosts_walker</span><span class='period'>.</span><span class='id identifier rubyid_to_enum'>to_enum</span><span class='lparen'>(</span><span class='symbol'>:errors</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span>
<span class='id identifier rubyid_grouped'>grouped</span> <span class='op'>=</span> <span class='id identifier rubyid_errors'>errors</span><span class='period'>.</span><span class='id identifier rubyid_group_by'>group_by</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_err'>err</span><span class='op'>|</span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_cause'>cause</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>?</span> <span class='kw'>nil</span> <span class='op'>:</span> <span class='lparen'>(</span><span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_cause'>cause</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='symbol'>:MESSAGE</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='id identifier rubyid_err'>err</span><span class='period'>.</span><span class='id identifier rubyid_cause'>cause</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='op'>::</span><span class='const'>MESSAGE</span> <span class='op'>:</span> <span class='kw'>nil</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_error_options'>error_options</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_grouped'>grouped</span><span class='period'>.</span><span class='id identifier rubyid_any?'>any?</span>
<span class='id identifier rubyid_grouped'>grouped</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span> <span class='id identifier rubyid_message'>message</span><span class='comma'>,</span> <span class='id identifier rubyid_error_subset'>error_subset</span> <span class='op'>|</span>
<span class='id identifier rubyid_invalid_values'>invalid_values</span> <span class='op'>=</span> <span class='id identifier rubyid_error_subset'>error_subset</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span><span class='lparen'>(</span><span class='op'>&amp;</span><span class='symbol'>:value</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_take'>take</span><span class='lparen'>(</span><span class='int'>5</span><span class='rparen'>)</span>
<span class='id identifier rubyid_message'>message</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Unexpected values</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_message'>message</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_error_reasons'>error_reasons</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_content'>: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_invalid_values'>invalid_values</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>, </span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_rhosts_walker'>rhosts_walker</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_datastore'>datastore</span><span class='op'>|</span>
<span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='op'>|</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>datastore:</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span>
<span class='id identifier rubyid_error_options'>error_options</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_name'>name</span>
<span class='kw'>if</span> <span class='id identifier rubyid_rhosts_count'>rhosts_count</span> <span class='op'>&gt;</span> <span class='int'>1</span>
<span class='id identifier rubyid_error_reasons'>error_reasons</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>for rhosts value </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>UNPARSED_RHOSTS</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_error_options'>error_options</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="OptionValidateError.html" title="Msf::OptionValidateError (class)">OptionValidateError</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="OptionValidateError.html#initialize-instance_method" title="Msf::OptionValidateError#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_error_options'>error_options</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='comma'>,</span> <span class='label'>reasons:</span> <span class='id identifier rubyid_error_reasons'>error_reasons</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>One or more options failed to validate: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_error_options'>error_options</span><span class='period'>.</span><span class='id identifier rubyid_to_a'>to_a</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>, </span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_error_options'>error_options</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_each_pair'>each_pair</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_name'>name</span><span class='comma'>,</span> <span class='id identifier rubyid_option'>option</span><span class='op'>|</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_option'>option</span><span class='period'>.</span><span class='id identifier rubyid_valid?'>valid?</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='label'>datastore:</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='rparen'>)</span>
<span class='id identifier rubyid_error_options'>error_options</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_name'>name</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_error_options'>error_options</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="OptionValidateError.html" title="Msf::OptionValidateError (class)">OptionValidateError</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="OptionValidateError.html#initialize-instance_method" title="Msf::OptionValidateError#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_error_options'>error_options</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>One or more options failed to validate: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_error_options'>error_options</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>, </span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>true</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:03:26 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>