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

1763 lines
125 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Module: Msf::Exploit::Remote::LDAP::Queries
&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::Exploit::Remote::LDAP::Queries";
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 (Q)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../../Msf.html" title="Msf (module)">Msf</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Remote.html" title="Msf::Exploit::Remote (class)">Remote</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../LDAP.html" title="Msf::Exploit::Remote::LDAP (module)">LDAP</a></span></span>
&raquo;
<span class="title">Queries</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>Module: Msf::Exploit::Remote::LDAP::Queries
</h1>
<div class="box_info">
<dl>
<dt>Included in:</dt>
<dd><span class='object_link'><a href="../../../../Rex/Post/LDAP/Ui/Console/CommandDispatcher/Client.html" title="Rex::Post::LDAP::Ui::Console::CommandDispatcher::Client (class)">Rex::Post::LDAP::Ui::Console::CommandDispatcher::Client</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/exploit/remote/ldap/queries.rb</dd>
</dl>
</div>
<h2>
Constant Summary
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
</h2>
<dl class="constants">
<dt id="FLAG_DISALLOW_DELETE-constant" class="">FLAG_DISALLOW_DELETE =
<div class="docstring">
<div class="discussion">
<p>Taken from <a href="https://www.powershellgallery.com/packages/S.DS.P/2.1.3/Content/Transforms%5CsystemFlags.ps1">www.powershellgallery.com/packages/S.DS.P/2.1.3/Content/Transforms%5CsystemFlags.ps1</a> and from <a href="https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/1e38247d-8234-4273-9de3-bbf313548631">docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/1e38247d-8234-4273-9de3-bbf313548631</a></p>
</div>
</div>
<div class="tags">
</div>
</dt>
<dd><pre class="code"><span class='int'>0x80000000</span></pre></dd>
<dt id="FLAG_CONFIG_ALLOW_RENAME-constant" class="">FLAG_CONFIG_ALLOW_RENAME =
</dt>
<dd><pre class="code"><span class='int'>0x40000000</span></pre></dd>
<dt id="FLAG_CONFIG_ALLOW_MOVE-constant" class="">FLAG_CONFIG_ALLOW_MOVE =
</dt>
<dd><pre class="code"><span class='int'>0x20000000</span></pre></dd>
<dt id="FLAG_CONFIG_ALLOW_LIMITED_MOVE-constant" class="">FLAG_CONFIG_ALLOW_LIMITED_MOVE =
</dt>
<dd><pre class="code"><span class='int'>0x10000000</span></pre></dd>
<dt id="FLAG_DOMAIN_DISALLOW_RENAME-constant" class="">FLAG_DOMAIN_DISALLOW_RENAME =
</dt>
<dd><pre class="code"><span class='int'>0x8000000</span></pre></dd>
<dt id="FLAG_DOMAIN_DISALLOW_MOVE-constant" class="">FLAG_DOMAIN_DISALLOW_MOVE =
</dt>
<dd><pre class="code"><span class='int'>0x4000000</span></pre></dd>
<dt id="FLAG_DISALLOW_MOVE_ON_DELETE-constant" class="">FLAG_DISALLOW_MOVE_ON_DELETE =
</dt>
<dd><pre class="code"><span class='int'>0x2000000</span></pre></dd>
<dt id="FLAG_ATTR_IS_RDN-constant" class="">FLAG_ATTR_IS_RDN =
</dt>
<dd><pre class="code"><span class='int'>0x20</span></pre></dd>
<dt id="FLAG_SCHEMA_BASE_OBJECT-constant" class="">FLAG_SCHEMA_BASE_OBJECT =
</dt>
<dd><pre class="code"><span class='int'>0x10</span></pre></dd>
<dt id="FLAG_ATTR_IS_OPERATIONAL-constant" class="">FLAG_ATTR_IS_OPERATIONAL =
</dt>
<dd><pre class="code"><span class='int'>0x8</span></pre></dd>
<dt id="FLAG_ATTR_IS_CONSTRUCTED-constant" class="">FLAG_ATTR_IS_CONSTRUCTED =
</dt>
<dd><pre class="code"><span class='int'>0x4</span></pre></dd>
<dt id="FLAG_ATTR_REQ_PARTIAL_SET_MEMBER-constant" class="">FLAG_ATTR_REQ_PARTIAL_SET_MEMBER =
</dt>
<dd><pre class="code"><span class='int'>0x2</span></pre></dd>
<dt id="FLAG_NOT_REPLICATED-constant" class="">FLAG_NOT_REPLICATED =
</dt>
<dd><pre class="code"><span class='int'>0x1</span></pre></dd>
</dl>
<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="#convert_nt_timestamp_to_time_string-instance_method" title="#convert_nt_timestamp_to_time_string (instance method)">#<strong>convert_nt_timestamp_to_time_string</strong>(nt_timestamp) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#convert_pwd_age_to_time_string-instance_method" title="#convert_pwd_age_to_time_string (instance method)">#<strong>convert_pwd_age_to_time_string</strong>(timestamp) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#convert_system_flags_to_string-instance_method" title="#convert_system_flags_to_string (instance method)">#<strong>convert_system_flags_to_string</strong>(flags) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#generate_rex_tables-instance_method" title="#generate_rex_tables (instance method)">#<strong>generate_rex_tables</strong>(entry, format) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#normalize_entry-instance_method" title="#normalize_entry (instance method)">#<strong>normalize_entry</strong>(entry, attribute_properties) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#output_data_csv-instance_method" title="#output_data_csv (instance method)">#<strong>output_data_csv</strong>(entry) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#output_data_table-instance_method" title="#output_data_table (instance method)">#<strong>output_data_table</strong>(entry) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#output_json_data-instance_method" title="#output_json_data (instance method)">#<strong>output_json_data</strong>(entry) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#perform_ldap_query-instance_method" title="#perform_ldap_query (instance method)">#<strong>perform_ldap_query</strong>(ldap, filter, attributes, base, schema_dn, scope: nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#perform_ldap_query_streaming-instance_method" title="#perform_ldap_query_streaming (instance method)">#<strong>perform_ldap_query_streaming</strong>(ldap, filter, attributes, base, schema_dn, scope: nil, controls: []) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#query_attributes_data-instance_method" title="#query_attributes_data (instance method)">#<strong>query_attributes_data</strong>(ldap, attributes, schema_dn) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#read_der_certificate_file-instance_method" title="#read_der_certificate_file (instance method)">#<strong>read_der_certificate_file</strong>(cert) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Read in a DER formatted certificate file and transform it into a OpenSSL::X509::Certificate object before then using that object to read the properties of the certificate and return this info as a string.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#run_builtin_ldap_query-instance_method" title="#run_builtin_ldap_query (instance method)">#<strong>run_builtin_ldap_query</strong>(queryname) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#run_ldap_query-instance_method" title="#run_ldap_query (instance method)">#<strong>run_ldap_query</strong>(filter_string, attributes) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#run_queries_from_file-instance_method" title="#run_queries_from_file (instance method)">#<strong>run_queries_from_file</strong>(ldap, queries, schema_dn, output_format, base_dn: nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#safe_load_queries-instance_method" title="#safe_load_queries (instance method)">#<strong>safe_load_queries</strong>(filename) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#show_output-instance_method" title="#show_output (instance method)">#<strong>show_output</strong>(entry, output_format) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#validate_result!-instance_method" title="#validate_result! (instance method)">#<strong>validate_result!</strong>(operation_result) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
</ul>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="convert_nt_timestamp_to_time_string-instance_method">
#<strong>convert_nt_timestamp_to_time_string</strong>(nt_timestamp) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
148
149
150</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 148</span>
<span class='kw'>def</span> <span class='id identifier rubyid_convert_nt_timestamp_to_time_string'>convert_nt_timestamp_to_time_string</span><span class='lparen'>(</span><span class='id identifier rubyid_nt_timestamp'>nt_timestamp</span><span class='rparen'>)</span>
<span class='const'>Time</span><span class='period'>.</span><span class='id identifier rubyid_at'>at</span><span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_nt_timestamp'>nt_timestamp</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>-</span> <span class='int'>116444736000000000</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='int'>10000000</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_utc'>utc</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="convert_pwd_age_to_time_string-instance_method">
#<strong>convert_pwd_age_to_time_string</strong>(timestamp) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
152
153
154
155
156
157
158
159</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 152</span>
<span class='kw'>def</span> <span class='id identifier rubyid_convert_pwd_age_to_time_string'>convert_pwd_age_to_time_string</span><span class='lparen'>(</span><span class='id identifier rubyid_timestamp'>timestamp</span><span class='rparen'>)</span>
<span class='id identifier rubyid_seconds'>seconds</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_timestamp'>timestamp</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>/</span> <span class='op'>-</span><span class='int'>1</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='int'>10000000</span> <span class='comment'># Convert always negative number to positive then convert to seconds from tick count.
</span> <span class='id identifier rubyid_days'>days</span> <span class='op'>=</span> <span class='id identifier rubyid_seconds'>seconds</span> <span class='op'>/</span> <span class='int'>86400</span>
<span class='id identifier rubyid_hours'>hours</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_seconds'>seconds</span> <span class='op'>%</span> <span class='int'>86400</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='int'>3600</span>
<span class='id identifier rubyid_minutes'>minutes</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_seconds'>seconds</span> <span class='op'>%</span> <span class='int'>86400</span><span class='rparen'>)</span> <span class='op'>%</span> <span class='int'>3600</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='int'>60</span>
<span class='id identifier rubyid_real_seconds'>real_seconds</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_seconds'>seconds</span> <span class='op'>%</span> <span class='int'>86400</span><span class='rparen'>)</span> <span class='op'>%</span> <span class='int'>3600</span><span class='rparen'>)</span> <span class='op'>%</span> <span class='int'>60</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_days'>days</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_hours'>hours</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_rjust'>rjust</span><span class='lparen'>(</span><span class='int'>2</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_minutes'>minutes</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_rjust'>rjust</span><span class='lparen'>(</span><span class='int'>2</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_real_seconds'>real_seconds</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_rjust'>rjust</span><span class='lparen'>(</span><span class='int'>2</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0</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></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="convert_system_flags_to_string-instance_method">
#<strong>convert_system_flags_to_string</strong>(flags) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 192</span>
<span class='kw'>def</span> <span class='id identifier rubyid_convert_system_flags_to_string'>convert_system_flags_to_string</span><span class='lparen'>(</span><span class='id identifier rubyid_flags'>flags</span><span class='rparen'>)</span>
<span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>=</span> <span class='id identifier rubyid_flags'>flags</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='id identifier rubyid_flag_string'>flag_string</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_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_DISALLOW_DELETE | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_DISALLOW_DELETE-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_DISALLOW_DELETE (constant)">FLAG_DISALLOW_DELETE</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_CONFIG_ALLOW_RENAME | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_CONFIG_ALLOW_RENAME-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_CONFIG_ALLOW_RENAME (constant)">FLAG_CONFIG_ALLOW_RENAME</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_CONFIG_ALLOW_MOVE | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_CONFIG_ALLOW_MOVE-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_CONFIG_ALLOW_MOVE (constant)">FLAG_CONFIG_ALLOW_MOVE</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_CONFIG_ALLOW_LIMITED_MOVE | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_CONFIG_ALLOW_LIMITED_MOVE-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_CONFIG_ALLOW_LIMITED_MOVE (constant)">FLAG_CONFIG_ALLOW_LIMITED_MOVE</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_DOMAIN_DISALLOW_RENAME | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_DOMAIN_DISALLOW_RENAME-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_DOMAIN_DISALLOW_RENAME (constant)">FLAG_DOMAIN_DISALLOW_RENAME</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_DOMAIN_DISALLOW_MOVE | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_DOMAIN_DISALLOW_MOVE-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_DOMAIN_DISALLOW_MOVE (constant)">FLAG_DOMAIN_DISALLOW_MOVE</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_DISALLOW_MOVE_ON_DELETE | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_DISALLOW_MOVE_ON_DELETE-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_DISALLOW_MOVE_ON_DELETE (constant)">FLAG_DISALLOW_MOVE_ON_DELETE</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_ATTR_IS_RDN | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_ATTR_IS_RDN-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_ATTR_IS_RDN (constant)">FLAG_ATTR_IS_RDN</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_SCHEMA_BASE_OBJECT | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_SCHEMA_BASE_OBJECT-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_SCHEMA_BASE_OBJECT (constant)">FLAG_SCHEMA_BASE_OBJECT</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_ATTR_IS_OPERATIONAL | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_ATTR_IS_OPERATIONAL-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_ATTR_IS_OPERATIONAL (constant)">FLAG_ATTR_IS_OPERATIONAL</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_ATTR_IS_CONSTRUCTED | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_ATTR_IS_CONSTRUCTED-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_ATTR_IS_CONSTRUCTED (constant)">FLAG_ATTR_IS_CONSTRUCTED</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_ATTR_REQ_PARTIAL_SET_MEMBER | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_ATTR_REQ_PARTIAL_SET_MEMBER-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_ATTR_REQ_PARTIAL_SET_MEMBER (constant)">FLAG_ATTR_REQ_PARTIAL_SET_MEMBER</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span> <span class='op'>&lt;&lt;</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FLAG_NOT_REPLICATED | </span><span class='tstring_end'>&#39;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_flags_converted'>flags_converted</span> <span class='op'>&amp;</span> <span class='const'><span class='object_link'><a href="#FLAG_NOT_REPLICATED-constant" title="Msf::Exploit::Remote::LDAP::Queries::FLAG_NOT_REPLICATED (constant)">FLAG_NOT_REPLICATED</a></span></span> <span class='op'>&gt;</span> <span class='int'>0</span>
<span class='id identifier rubyid_flag_string'>flag_string</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='period'>.</span><span class='id identifier rubyid_gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'> \|$</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="generate_rex_tables-instance_method">
#<strong>generate_rex_tables</strong>(entry, format) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 110</span>
<span class='kw'>def</span> <span class='id identifier rubyid_generate_rex_tables'>generate_rex_tables</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='comma'>,</span> <span class='id identifier rubyid_format'>format</span><span class='rparen'>)</span>
<span class='id identifier rubyid_tbl'>tbl</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='op'>::</span><span class='const'>Table</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Header</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:dn</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Indent</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='int'>1</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Columns</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='qwords_beg'>%w[</span><span class='tstring_content'>Name</span><span class='words_sep'> </span><span class='tstring_content'>Attributes</span><span class='tstring_end'>]</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ColProps</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Name</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='lbrace'>{</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Strip</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>false</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SortIndex</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='op'>-</span><span class='int'>1</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>WordWrap</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='kw'>false</span>
<span class='rparen'>)</span>
<span class='id identifier rubyid_entry'>entry</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_attr'>attr</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_format'>format</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>table</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_attr'>attr</span> <span class='op'>==</span> <span class='symbol'>:dn</span> <span class='comment'># Skip over DN entries for tables since DN information is shown in header.
</span>
<span class='id identifier rubyid_tbl'>tbl</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='comma'>,</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&gt;</span> <span class='int'>1</span>
<span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>1</span><span class='op'>...</span><span class='rbracket'>]</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_additional_attr'>additional_attr</span><span class='op'>|</span>
<span class='id identifier rubyid_tbl'>tbl</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'> \\_</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_additional_attr'>additional_attr</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_tbl'>tbl</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='comma'>,</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'><span class='object_link'><a href="../../../../top-level-namespace.html#join-instance_method" title="#join (method)">join</a></span></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='rbracket'>]</span> <span class='comment'># DN information is not shown in CSV output as a header so keep DN entries in.
</span> <span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>case</span> <span class='id identifier rubyid_format'>format</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>table</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_print_line'>print_line</span><span class='lparen'>(</span><span class='id identifier rubyid_tbl'>tbl</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>csv</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_print_line'>print_line</span><span class='lparen'>(</span><span class='id identifier rubyid_tbl'>tbl</span><span class='period'>.</span><span class='id identifier rubyid_to_csv'>to_csv</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_print_warning'>print_warning</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid format: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_format'>format</span><span class='embexpr_end'>}</span><span class='tstring_content'> Supported OUTPUT_FORMAT values are csv and table</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='comment'># Default to table output, seems reasonable to output something if we have it rather than blow up
</span> <span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Defaulting to table output</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_print_line'>print_line</span><span class='lparen'>(</span><span class='id identifier rubyid_tbl'>tbl</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</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="normalize_entry-instance_method">
#<strong>normalize_entry</strong>(entry, attribute_properties) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 256</span>
<span class='kw'>def</span> <span class='id identifier rubyid_normalize_entry'>normalize_entry</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='rparen'>)</span>
<span class='comment'># Convert to a hash so we get the raw data we need from within the Net::LDAP::Entry object
</span> <span class='id identifier rubyid_entry'>entry</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='period'>.</span><span class='id identifier rubyid_to_h'>to_h</span>
<span class='id identifier rubyid_normalized_entry'>normalized_entry</span> <span class='op'>=</span> <span class='lbrace'>{</span> <span class='label'>dn:</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:dn</span><span class='rbracket'>]</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_entry'>entry</span><span class='period'>.</span><span class='id identifier rubyid_each_key'>each_key</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span> <span class='op'>==</span> <span class='symbol'>:dn</span> <span class='comment'># Skip the DN case as there will be no attributes_properties entry for it.
</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_v'>v</span><span class='op'>|</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_to_hex_ascii'>to_hex_ascii</span><span class='lparen'>(</span><span class='id identifier rubyid_v'>v</span><span class='rparen'>)</span> <span class='rbrace'>}</span>
<span class='id identifier rubyid_attribute_property'>attribute_property</span> <span class='op'>=</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_attribute_property'>attribute_property</span>
<span class='id identifier rubyid_normalized_entry'>normalized_entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span>
<span class='kw'>next</span>
<span class='kw'>end</span>
<span class='kw'>case</span> <span class='id identifier rubyid_attribute_property'>attribute_property</span><span class='lbracket'>[</span><span class='symbol'>:omsyntax</span><span class='rbracket'>]</span>
<span class='kw'>when</span> <span class='int'>1</span> <span class='comment'># Boolean
</span> <span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>!=</span> <span class='int'>0</span>
<span class='kw'>when</span> <span class='int'>2</span> <span class='comment'># Integer
</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span> <span class='op'>==</span> <span class='symbol'>:systemflags</span>
<span class='id identifier rubyid_flags'>flags</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_converted_flags_string'>converted_flags_string</span> <span class='op'>=</span> <span class='id identifier rubyid_convert_system_flags_to_string'>convert_system_flags_to_string</span><span class='lparen'>(</span><span class='id identifier rubyid_flags'>flags</span><span class='rparen'>)</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_converted_flags_string'>converted_flags_string</span>
<span class='kw'>end</span>
<span class='kw'>when</span> <span class='int'>4</span> <span class='comment'># OctetString or SID String
</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_property'>attribute_property</span><span class='lbracket'>[</span><span class='symbol'>:attributesyntax</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2.5.5.17</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># SID String
</span> <span class='comment'># Advice taken from https://ldapwiki.com/wiki/ObjectSID
</span> <span class='id identifier rubyid_object_sid_raw'>object_sid_raw</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_sid_data'>sid_data</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp.html" title="Rex::Proto::MsDtyp (module)">MsDtyp</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp/MsDtypSid.html" title="Rex::Proto::MsDtyp::MsDtypSid (class)">MsDtypSid</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_object_sid_raw'>object_sid_raw</span><span class='rparen'>)</span>
<span class='id identifier rubyid_sid_string'>sid_string</span> <span class='op'>=</span> <span class='id identifier rubyid_sid_data'>sid_data</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>rescue</span> <span class='const'>IOError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Failed to read SID. Error was </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>next</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_sid_string'>sid_string</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_attribute_property'>attribute_property</span><span class='lbracket'>[</span><span class='symbol'>:attributesyntax</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2.5.5.10</span><span class='tstring_end'>&#39;</span></span> <span class='comment'># OctetString
</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>guid$</span><span class='regexp_end'>/i</span></span><span class='rparen'>)</span>
<span class='comment'># Get the entry[attribute_name] object will be an array containing a single string entry,
</span> <span class='comment'># so reach in and extract that string, which will contain binary data.
</span> <span class='id identifier rubyid_bin_guid'>bin_guid</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_bin_guid'>bin_guid</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>16</span> <span class='comment'># Length of binary data in bytes since this is what .length uses. In bits its 128 bits.
</span> <span class='kw'>begin</span>
<span class='id identifier rubyid_decoded_guid'>decoded_guid</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp.html" title="Rex::Proto::MsDtyp (module)">MsDtyp</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp/MsDtypGuid.html" title="Rex::Proto::MsDtyp::MsDtypGuid (class)">MsDtypGuid</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_bin_guid'>bin_guid</span><span class='rparen'>)</span>
<span class='id identifier rubyid_decoded_guid_string'>decoded_guid_string</span> <span class='op'>=</span> <span class='id identifier rubyid_decoded_guid'>decoded_guid</span><span class='period'>.</span><span class='id identifier rubyid_get'>get</span>
<span class='kw'>rescue</span> <span class='const'>IOError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Failed to read GUID. Error was </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>next</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_decoded_guid_string'>decoded_guid_string</span>
<span class='kw'>end</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span> <span class='op'>==</span> <span class='symbol'>:cacertificate</span> <span class='op'>||</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span> <span class='op'>==</span> <span class='symbol'>:usercertificate</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_raw_key_data'>raw_key_data</span><span class='op'>|</span>
<span class='id identifier rubyid__certificate_file'>_certificate_file</span><span class='comma'>,</span> <span class='id identifier rubyid_read_data'>read_data</span> <span class='op'>=</span> <span class='id identifier rubyid_read_der_certificate_file'>read_der_certificate_file</span><span class='lparen'>(</span><span class='id identifier rubyid_raw_key_data'>raw_key_data</span><span class='rparen'>)</span>
<span class='id identifier rubyid_read_data'>read_data</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>when</span> <span class='int'>6</span> <span class='comment'># String (Object-Identifier)
</span> <span class='kw'>when</span> <span class='int'>10</span> <span class='comment'># Enumeration
</span> <span class='kw'>when</span> <span class='int'>18</span> <span class='comment'># NumbericString
</span> <span class='kw'>when</span> <span class='int'>19</span> <span class='comment'># PrintableString
</span> <span class='kw'>when</span> <span class='int'>20</span> <span class='comment'># Case-Ignore String
</span> <span class='kw'>when</span> <span class='int'>22</span> <span class='comment'># IA5String
</span> <span class='kw'>when</span> <span class='int'>23</span> <span class='comment'># GeneralizedTime String (UTC-Time)
</span> <span class='kw'>when</span> <span class='int'>24</span> <span class='comment'># GeneralizedTime String (GeneralizedTime)
</span> <span class='kw'>when</span> <span class='int'>27</span> <span class='comment'># Case Sensitive String
</span> <span class='kw'>when</span> <span class='int'>64</span> <span class='comment'># DirectoryString String(Unicode)
</span> <span class='kw'>when</span> <span class='int'>65</span> <span class='comment'># LargeInteger
</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span> <span class='op'>==</span> <span class='symbol'>:creationtime</span> <span class='op'>||</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>lastlog(?:on|off)</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_timestamp'>timestamp</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_time_string'>time_string</span> <span class='op'>=</span> <span class='id identifier rubyid_convert_nt_timestamp_to_time_string'>convert_nt_timestamp_to_time_string</span><span class='lparen'>(</span><span class='id identifier rubyid_timestamp'>timestamp</span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>lockoutduration$</span><span class='regexp_end'>/i</span></span><span class='rparen'>)</span> <span class='op'>||</span> <span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>pwdage$</span><span class='regexp_end'>/</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_timestamp'>timestamp</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_time_string'>time_string</span> <span class='op'>=</span> <span class='id identifier rubyid_convert_pwd_age_to_time_string'>convert_pwd_age_to_time_string</span><span class='lparen'>(</span><span class='id identifier rubyid_timestamp'>timestamp</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_time_string'>time_string</span>
<span class='kw'>when</span> <span class='int'>66</span> <span class='comment'># String (Nt Security Descriptor)
</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_property'>attribute_property</span><span class='lbracket'>[</span><span class='symbol'>:attributesyntax</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>2.5.5.15</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_sd'>sd</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp.html" title="Rex::Proto::MsDtyp (module)">MsDtyp</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../../Rex/Proto/MsDtyp/MsDtypSecurityDescriptor.html" title="Rex::Proto::MsDtyp::MsDtypSecurityDescriptor (class)">MsDtypSecurityDescriptor</a></span></span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_sd'>sd</span><span class='period'>.</span><span class='id identifier rubyid_to_sddl_text'>to_sddl_text</span><span class='lparen'>(</span><span class='label'>domain_sid:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>failed to parse a binary security descriptor to SDDL</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>when</span> <span class='int'>127</span> <span class='comment'># Object
</span> <span class='kw'>else</span>
<span class='id identifier rubyid_print_error'>print_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unknown oMSyntax entry: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_attribute_property'>attribute_property</span><span class='lbracket'>[</span><span class='symbol'>:omsyntax</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_normalized_entry'>normalized_entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attribute_name'>attribute_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_normalized_attribute'>normalized_attribute</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_normalized_entry'>normalized_entry</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="output_data_csv-instance_method">
#<strong>output_data_csv</strong>(entry) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
224
225
226</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 224</span>
<span class='kw'>def</span> <span class='id identifier rubyid_output_data_csv'>output_data_csv</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='id identifier rubyid_generate_rex_tables'>generate_rex_tables</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>csv</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="output_data_table-instance_method">
#<strong>output_data_table</strong>(entry) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
220
221
222</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 220</span>
<span class='kw'>def</span> <span class='id identifier rubyid_output_data_table'>output_data_table</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='id identifier rubyid_generate_rex_tables'>generate_rex_tables</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>table</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="output_json_data-instance_method">
#<strong>output_json_data</strong>(entry) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
211
212
213
214
215
216
217
218</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 211</span>
<span class='kw'>def</span> <span class='id identifier rubyid_output_json_data'>output_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_entry'>entry</span><span class='period'>.</span><span class='id identifier rubyid_each_key'>each_key</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_attr'>attr</span><span class='op'>|</span>
<span class='id identifier rubyid_data'>data</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>==</span> <span class='int'>1</span> <span class='op'>?</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>:</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='id identifier rubyid_attr'>attr</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:dn</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_split'>split</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='period'>.</span><span class='id identifier rubyid_join'><span class='object_link'><a href="../../../../top-level-namespace.html#join-instance_method" title="#join (method)">join</a></span></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='rparen'>)</span>
<span class='id identifier rubyid_print_line'>print_line</span><span class='lparen'>(</span><span class='const'>JSON</span><span class='period'>.</span><span class='id identifier rubyid_pretty_generate'>pretty_generate</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="perform_ldap_query-instance_method">
#<strong>perform_ldap_query</strong>(ldap, filter, attributes, base, schema_dn, scope: nil) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 70</span>
<span class='kw'>def</span> <span class='id identifier rubyid_perform_ldap_query'>perform_ldap_query</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_base'>base</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='comma'>,</span> <span class='label'>scope:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_results'>results</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_perform_ldap_query_streaming'>perform_ldap_query_streaming</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_base'>base</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='comma'>,</span> <span class='label'>scope:</span> <span class='id identifier rubyid_scope'>scope</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_result'>result</span><span class='op'>|</span>
<span class='id identifier rubyid_results'>results</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_result'>result</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_query_result_table'>query_result_table</span> <span class='op'>=</span> <span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_get_operation_result'>get_operation_result</span><span class='period'>.</span><span class='id identifier rubyid_table'>table</span>
<span class='id identifier rubyid_validate_result!'>validate_result!</span><span class='lparen'>(</span><span class='id identifier rubyid_query_result_table'>query_result_table</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_results'>results</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_results'>results</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_print_error'>print_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No results found for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_filter'>filter</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_results'>results</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="perform_ldap_query_streaming-instance_method">
#<strong>perform_ldap_query_streaming</strong>(ldap, filter, attributes, base, schema_dn, scope: nil, controls: []) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 87</span>
<span class='kw'>def</span> <span class='id identifier rubyid_perform_ldap_query_streaming'>perform_ldap_query_streaming</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_base'>base</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='comma'>,</span> <span class='label'>scope:</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='label'>controls:</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>else</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span> <span class='op'>=</span> <span class='id identifier rubyid_query_attributes_data'>query_attributes_data</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</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'>:to_sym</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='rparen'>)</span>
<span class='kw'>rescue</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="../../../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Remote.html" title="Msf::Exploit::Remote (class)">Remote</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../LDAP.html" title="Msf::Exploit::Remote::LDAP (module)">LDAP</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Error.html" title="Msf::Exploit::Remote::LDAP::Error (class)">Error</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_wlog'><span class='object_link'><a href="../../../../top-level-namespace.html#wlog-instance_method" title="#wlog (method)">wlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Failed getting attribute properties: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>ensure</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_scope'>scope</span> <span class='op'>||=</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>SearchScope_WholeSubtree</span>
<span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_search'>search</span><span class='lparen'>(</span><span class='label'>base:</span> <span class='id identifier rubyid_base'>base</span><span class='comma'>,</span> <span class='label'>filter:</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='label'>attributes:</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='label'>scope:</span> <span class='id identifier rubyid_scope'>scope</span><span class='comma'>,</span> <span class='label'>controls:</span> <span class='id identifier rubyid_controls'>controls</span><span class='comma'>,</span> <span class='label'>return_result:</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_result'>result</span><span class='op'>|</span>
<span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>+=</span> <span class='int'>1</span>
<span class='kw'>yield</span> <span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_result_count'>result_count</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="query_attributes_data-instance_method">
#<strong>query_attributes_data</strong>(ldap, attributes, schema_dn) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 228</span>
<span class='kw'>def</span> <span class='id identifier rubyid_query_attributes_data'>query_attributes_data</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_filter'>filter</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>(|</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_attributes'>attributes</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_key'>key</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='period'>.</span><span class='id identifier rubyid_key?'>key?</span><span class='lparen'>(</span><span class='id identifier rubyid_key'>key</span><span class='rparen'>)</span> <span class='comment'># Skip if we already have this one
</span> <span class='kw'>next</span> <span class='kw'>if</span> <span class='id identifier rubyid_key'>key</span> <span class='op'>==</span> <span class='symbol'>:dn</span> <span class='comment'># Skip DN as it will never have a schema entry
</span>
<span class='id identifier rubyid_filter'>filter</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>(LDAPDisplayName=</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_key'>key</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='id identifier rubyid_filter'>filter</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>)</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_filter'>filter</span><span class='period'>.</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'>LDAPDisplayName=</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_attributes_data'>attributes_data</span> <span class='op'>=</span> <span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_search'>search</span><span class='lparen'>(</span><span class='label'>base:</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='comma'>,</span> <span class='label'>filter:</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='label'>attributes:</span> <span class='qsymbols_beg'>%i[</span><span class='tstring_content'>LDAPDisplayName</span><span class='words_sep'> </span><span class='tstring_content'>isSingleValued</span><span class='words_sep'> </span><span class='tstring_content'>oMSyntax</span><span class='words_sep'> </span><span class='tstring_content'>attributeSyntax</span><span class='tstring_end'>]</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_validate_result!'>validate_result!</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_get_operation_result'>get_operation_result</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attributes_data'>attributes_data</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_entry'>entry</span><span class='op'>|</span>
<span class='id identifier rubyid_ldap_display_name'>ldap_display_name</span> <span class='op'>=</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:ldapdisplayname</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='lbracket'>[</span><span class='id identifier rubyid_ldap_display_name'>ldap_display_name</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>issinglevalued:</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:issinglevalued</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TRUE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='label'>omsyntax:</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:omsyntax</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='comma'>,</span>
<span class='label'>attributesyntax:</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='symbol'>:attributesyntax</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='rbrace'>}</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_attribute_properties'>attribute_properties</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="read_der_certificate_file-instance_method">
#<strong>read_der_certificate_file</strong>(cert) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Read in a DER formatted certificate file and transform it into a OpenSSL::X509::Certificate object before then using that object to read the properties of the certificate and return this info as a string.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
164
165
166
167
168
169
170
171
172
173
174</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 164</span>
<span class='kw'>def</span> <span class='id identifier rubyid_read_der_certificate_file'>read_der_certificate_file</span><span class='lparen'>(</span><span class='id identifier rubyid_cert'>cert</span><span class='rparen'>)</span>
<span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span> <span class='op'>=</span> <span class='const'>OpenSSL</span><span class='op'>::</span><span class='const'>X509</span><span class='op'>::</span><span class='const'>Certificate</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_cert'>cert</span><span class='rparen'>)</span>
<span class='id identifier rubyid_version'>version</span> <span class='op'>=</span> <span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='period'>.</span><span class='id identifier rubyid_version'>version</span>
<span class='id identifier rubyid_subject'>subject</span> <span class='op'>=</span> <span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='period'>.</span><span class='id identifier rubyid_subject'>subject</span>
<span class='id identifier rubyid_issuer'>issuer</span> <span class='op'>=</span> <span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='period'>.</span><span class='id identifier rubyid_issuer'>issuer</span>
<span class='id identifier rubyid_algorithm'>algorithm</span> <span class='op'>=</span> <span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='period'>.</span><span class='id identifier rubyid_signature_algorithm'>signature_algorithm</span>
<span class='id identifier rubyid_extensions'>extensions</span> <span class='op'>=</span> <span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='period'>.</span><span class='id identifier rubyid_extensions'>extensions</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='id identifier rubyid_extensions'>extensions</span><span class='period'>.</span><span class='id identifier rubyid_strip!'>strip!</span>
<span class='id identifier rubyid_extensions'>extensions</span><span class='period'>.</span><span class='id identifier rubyid_gsub!'>gsub!</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'> \|$</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='comment'># Strip whitespace and then strip trailing | from end of string.
</span> <span class='lbracket'>[</span><span class='id identifier rubyid_openssl_certificate'>openssl_certificate</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Version: 0x</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_version'>version</span><span class='embexpr_end'>}</span><span class='tstring_content'>, Subject: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_subject'>subject</span><span class='embexpr_end'>}</span><span class='tstring_content'>, Issuer: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_issuer'>issuer</span><span class='embexpr_end'>}</span><span class='tstring_content'>, Signature Algorithm: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_algorithm'>algorithm</span><span class='embexpr_end'>}</span><span class='tstring_content'>, Extensions: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_extensions'>extensions</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="run_builtin_ldap_query-instance_method">
#<strong>run_builtin_ldap_query</strong>(queryname) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_run_builtin_ldap_query'>run_builtin_ldap_query</span><span class='lparen'>(</span><span class='id identifier rubyid_queryname'>queryname</span><span class='rparen'>)</span>
<span class='id identifier rubyid_missing_username'>missing_username</span> <span class='op'>=</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'>LDAPUsername</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='id identifier rubyid_session_missing_or_wrong_type'>session_missing_or_wrong_type</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='op'>!</span><span class='id identifier rubyid_session'>session</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</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="../../../Sessions.html" title="Msf::Sessions (module)">Sessions</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Sessions/LDAP.html" title="Msf::Sessions::LDAP (class)">LDAP</a></span></span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_bad_config'>bad_config</span> <span class='op'>=</span> <span class='id identifier rubyid_missing_username'>missing_username</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_session_missing_or_wrong_type'>session_missing_or_wrong_type</span>
<span class='id identifier rubyid_fail_with'>fail_with</span><span class='lparen'>(</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="../../../Module.html" title="Msf::Module (class)">Module</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html" title="Msf::Module::Failure (module)">Failure</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html#BadConfig-constant" title="Msf::Module::Failure::BadConfig (constant)">BadConfig</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Must provide a username for connecting to LDAP, or have an already existing LDAP session</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_bad_config'>bad_config</span>
<span class='id identifier rubyid_default_config_file_path'>default_config_file_path</span> <span class='op'>=</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span><span class='lparen'>(</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="../../../Config.html" title="Msf::Config (class)">Config</a></span></span><span class='period'>.</span><span class='id identifier rubyid_data_directory'><span class='object_link'><a href="../../../Config.html#data_directory-class_method" title="Msf::Config.data_directory (method)">data_directory</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>auxiliary</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>gather</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ldap_query</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ldap_queries_default.yaml</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_loaded_queries'>loaded_queries</span> <span class='op'>=</span> <span class='id identifier rubyid_safe_load_queries'>safe_load_queries</span><span class='lparen'>(</span><span class='id identifier rubyid_default_config_file_path'>default_config_file_path</span><span class='rparen'>)</span> <span class='op'>||</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_query'>query</span> <span class='op'>=</span> <span class='id identifier rubyid_loaded_queries'>loaded_queries</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_entry'>entry</span><span class='op'>|</span> <span class='id identifier rubyid_entry'>entry</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>action</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='id identifier rubyid_queryname'>queryname</span> <span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_ldap_query'>ldap_query</span> <span class='op'>=</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_print_line'>print_line</span>
<span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>=</span> <span class='id identifier rubyid_run_ldap_query'>run_ldap_query</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap_query'>ldap_query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>filter</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_ldap_query'>ldap_query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>attributes</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_result'>result</span><span class='op'>|</span>
<span class='kw'>yield</span> <span class='id identifier rubyid_result'>result</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>==</span> <span class='int'>0</span>
<span class='id identifier rubyid_print_error'>print_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>No entries could be found for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_ldap_query'>ldap_query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>filter</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_print_line'>print_line</span>
<span class='id identifier rubyid_print_good'>print_good</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Query returned </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_result_count'>result_count</span><span class='embexpr_end'>}</span><span class='tstring_content'> </span><span class='embexpr_beg'>#{</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>result</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_pluralize'>pluralize</span><span class='lparen'>(</span><span class='id identifier rubyid_result_count'>result_count</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>.</span><span class='tstring_end'>&quot;</span></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="run_ldap_query-instance_method">
#<strong>run_ldap_query</strong>(filter_string, attributes) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 33</span>
<span class='kw'>def</span> <span class='id identifier rubyid_run_ldap_query'>run_ldap_query</span><span class='lparen'>(</span><span class='id identifier rubyid_filter_string'>filter_string</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_ldap_connect'>ldap_connect</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_ldap'>ldap</span><span class='op'>|</span>
<span class='id identifier rubyid_validate_bind_success!'>validate_bind_success!</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='rparen'>)</span>
<span class='kw'>unless</span> <span class='lparen'>(</span><span class='id identifier rubyid_base_dn'>base_dn</span> <span class='op'>=</span> <span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_base_dn'>base_dn</span><span class='rparen'>)</span>
<span class='id identifier rubyid_fail_with'>fail_with</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html" title="Msf::Module::Failure (module)">Failure</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html#UnexpectedReply-constant" title="Msf::Module::Failure::UnexpectedReply (constant)">UnexpectedReply</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Couldn&#39;t discover base DN!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_schema_dn'>schema_dn</span> <span class='op'>=</span> <span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_schema_dn'>schema_dn</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_filter'>filter</span> <span class='op'>=</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>Filter</span><span class='period'>.</span><span class='id identifier rubyid_construct'>construct</span><span class='lparen'>(</span><span class='id identifier rubyid_filter_string'>filter_string</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_fail_with'>fail_with</span><span class='lparen'>(</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="../../../Module.html" title="Msf::Module (class)">Module</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html" title="Msf::Module::Failure (module)">Failure</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html#BadConfig-constant" title="Msf::Module::Failure::BadConfig (constant)">BadConfig</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not compile the filter </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_filter_string'>filter_string</span><span class='embexpr_end'>}</span><span class='tstring_content'>. Error was </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>=</span> <span class='id identifier rubyid_perform_ldap_query_streaming'>perform_ldap_query_streaming</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_base_dn'>base_dn</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid__attribute_properties'>_attribute_properties</span><span class='op'>|</span>
<span class='kw'>yield</span> <span class='id identifier rubyid_result'>result</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="../../../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>ConnectionTimeout</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_fail_with'>fail_with</span><span class='lparen'>(</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="../../../Module.html" title="Msf::Module (class)">Module</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html" title="Msf::Module::Failure (module)">Failure</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../../Module/Failure.html#Unreachable-constant" title="Msf::Module::Failure::Unreachable (constant)">Unreachable</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not connect. </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></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="run_queries_from_file-instance_method">
#<strong>run_queries_from_file</strong>(ldap, queries, schema_dn, output_format, base_dn: nil) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 368</span>
<span class='kw'>def</span> <span class='id identifier rubyid_run_queries_from_file'>run_queries_from_file</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_queries'>queries</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='comma'>,</span> <span class='id identifier rubyid_output_format'>output_format</span><span class='comma'>,</span> <span class='label'>base_dn:</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_base_dn'>base_dn</span> <span class='op'>||=</span> <span class='id identifier rubyid_ldap'>ldap</span><span class='period'>.</span><span class='id identifier rubyid_base_dn'>base_dn</span>
<span class='id identifier rubyid_queries'>queries</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_query'>query</span><span class='op'>|</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>action</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>filter</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>attributes</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_print_warning'>print_warning</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Each query in the query file must at least contain a &#39;action&#39;, &#39;filter&#39; and &#39;attributes&#39; attribute!</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>next</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_attributes'>attributes</span> <span class='op'>=</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>attributes</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_print_warning'>print_warning</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>At least one attribute needs to be specified per query in the query file for entries to work!</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>next</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_filter'>filter</span> <span class='op'>=</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>Filter</span><span class='period'>.</span><span class='id identifier rubyid_construct'>construct</span><span class='lparen'>(</span><span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>filter</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Running </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>action</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>...</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_query_base'>query_base</span> <span class='op'>=</span> <span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>base_dn_prefix</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>?</span> <span class='lbracket'>[</span><span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>base_dn_prefix</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='comma'>,</span> <span class='id identifier rubyid_base_dn'>base_dn</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_join'><span class='object_link'><a href="../../../../top-level-namespace.html#join-instance_method" title="#join (method)">join</a></span></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='op'>:</span> <span class='id identifier rubyid_base_dn'>base_dn</span>
<span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>=</span> <span class='id identifier rubyid_perform_ldap_query_streaming'>perform_ldap_query_streaming</span><span class='lparen'>(</span><span class='id identifier rubyid_ldap'>ldap</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_attributes'>attributes</span><span class='comma'>,</span> <span class='id identifier rubyid_query_base'>query_base</span><span class='comma'>,</span> <span class='id identifier rubyid_schema_dn'>schema_dn</span><span class='rparen'>)</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='op'>|</span>
<span class='id identifier rubyid_show_output'>show_output</span><span class='lparen'>(</span><span class='id identifier rubyid_normalize_entry'>normalize_entry</span><span class='lparen'>(</span><span class='id identifier rubyid_result'>result</span><span class='comma'>,</span> <span class='id identifier rubyid_attribute_properties'>attribute_properties</span><span class='rparen'>)</span><span class='comma'>,</span> <span class='id identifier rubyid_output_format'>output_format</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_print_warning'>print_warning</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Query </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>filter</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'> from </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_query'>query</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>action</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'> didn&#39;t return any results!</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_result_count'>result_count</span> <span class='op'>==</span> <span class='int'>0</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="safe_load_queries-instance_method">
#<strong>safe_load_queries</strong>(filename) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
57
58
59
60
61
62
63
64
65
66
67
68</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 57</span>
<span class='kw'>def</span> <span class='id identifier rubyid_safe_load_queries'>safe_load_queries</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_settings'>settings</span> <span class='op'>=</span> <span class='const'>YAML</span><span class='period'>.</span><span class='id identifier rubyid_safe_load'>safe_load</span><span class='lparen'>(</span><span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_binread'>binread</span><span class='lparen'>(</span><span class='id identifier rubyid_filename'>filename</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'>StandardError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Couldn&#39;t parse </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_filename'>filename</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='kw'>return</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_settings'>settings</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>queries</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span> <span class='const'>Array</span>
<span class='id identifier rubyid_settings'>settings</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>queries</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="show_output-instance_method">
#<strong>show_output</strong>(entry, output_format) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 352</span>
<span class='kw'>def</span> <span class='id identifier rubyid_show_output'>show_output</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='comma'>,</span> <span class='id identifier rubyid_output_format'>output_format</span><span class='rparen'>)</span>
<span class='kw'>case</span> <span class='id identifier rubyid_output_format'>output_format</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>csv</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_output_data_csv'>output_data_csv</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>table</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_output_data_table'>output_data_table</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='kw'>when</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>json</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_output_json_data'>output_json_data</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_print_warning'>print_warning</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Invalid format: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_output_format'>output_format</span><span class='embexpr_end'>}</span><span class='tstring_content'> Supported OUTPUT_FORMAT values are csv, table and json</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='comment'># Default to table output, seems reasonable to output something if we have it rather than blow up
</span> <span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Defaulting to table output</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_output_data_table'>output_data_table</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</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="validate_result!-instance_method">
#<strong>validate_result!</strong>(operation_result) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
392
393
394
395
396
397
398
399</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/remote/ldap/queries.rb', line 392</span>
<span class='kw'>def</span> <span class='id identifier rubyid_validate_result!'>validate_result!</span><span class='lparen'>(</span><span class='id identifier rubyid_operation_result'>operation_result</span><span class='rparen'>)</span>
<span class='id identifier rubyid_code'>code</span> <span class='op'>=</span> <span class='id identifier rubyid_operation_result'>operation_result</span><span class='period'>.</span><span class='id identifier rubyid_table'>table</span><span class='lbracket'>[</span><span class='symbol'>:code</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_code'>code</span> <span class='op'>==</span> <span class='int'>0</span>
<span class='id identifier rubyid_dlog'><span class='object_link'><a href="../../../../top-level-namespace.html#dlog-instance_method" title="#dlog (method)">dlog</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Operation was successful</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>else</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="../../../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../Remote.html" title="Msf::Exploit::Remote (class)">Remote</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../LDAP.html" title="Msf::Exploit::Remote::LDAP (module)">LDAP</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Error.html" title="Msf::Exploit::Remote::LDAP::Error (class)">Error</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Error.html#initialize-instance_method" title="Msf::Exploit::Remote::LDAP::Error#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='label'>error_code:</span> <span class='id identifier rubyid_code'>code</span><span class='comma'>,</span> <span class='label'>operation_result:</span> <span class='id identifier rubyid_operation_result'>operation_result</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:02:06 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>