Files
metasploit-gs/api/Rex/Proto/LDAP/Server.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

2616 lines
98 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Rex::Proto::LDAP::Server
&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 = "Rex::Proto::LDAP::Server";
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 (S)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../Rex.html" title="Rex (module)">Rex</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../LDAP.html" title="Rex::Proto::LDAP (module)">LDAP</a></span></span>
&raquo;
<span class="title">Server</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Rex::Proto::LDAP::Server
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Rex::Proto::LDAP::Server</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Includes:</dt>
<dd><span class='object_link'><a href="../../IO/GramServer.html" title="Rex::IO::GramServer (module)">IO::GramServer</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/rex/proto/ldap/server.rb</dd>
</dl>
</div>
<h2>Defined Under Namespace</h2>
<p class="children">
<strong class="modules">Modules:</strong> <span class='object_link'><a href="Server/LdapClient.html" title="Rex::Proto::LDAP::Server::LdapClient (module)">LdapClient</a></span>
<strong class="classes">Classes:</strong> <span class='object_link'><a href="Server/MockLdapClient.html" title="Rex::Proto::LDAP::Server::MockLdapClient (class)">MockLdapClient</a></span>
</p>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#ldif-instance_method" title="#ldif (instance method)">#<strong>ldif</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute ldif.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#serve_tcp-instance_method" title="#serve_tcp (instance method)">#<strong>serve_tcp</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute serve_tcp.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#serve_udp-instance_method" title="#serve_udp (instance method)">#<strong>serve_udp</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute serve_udp.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#sock_options-instance_method" title="#sock_options (instance method)">#<strong>sock_options</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute sock_options.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#syntax-instance_method" title="#syntax (instance method)">#<strong>syntax</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute syntax.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#tcp_sock-instance_method" title="#tcp_sock (instance method)">#<strong>tcp_sock</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute tcp_sock.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#udp_sock-instance_method" title="#udp_sock (instance method)">#<strong>udp_sock</strong> &#x21d2; Object </a>
</span>
<span class="note title readonly">readonly</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute udp_sock.</p>
</div></span>
</li>
</ul>
<h3 class="inherited">Attributes included from <span class='object_link'><a href="../../IO/GramServer.html" title="Rex::IO::GramServer (module)">IO::GramServer</a></span></h3>
<p class="inherited"><span class='object_link'><a href="../../IO/GramServer.html#dispatch_request_proc-instance_method" title="Rex::IO::GramServer#dispatch_request_proc (method)">#dispatch_request_proc</a></span>, <span class='object_link'><a href="../../IO/GramServer.html#listener_thread-instance_method" title="Rex::IO::GramServer#listener_thread (method)">#listener_thread</a></span>, <span class='object_link'><a href="../../IO/GramServer.html#send_response_proc-instance_method" title="Rex::IO::GramServer#send_response_proc (method)">#send_response_proc</a></span></p>
<h2>
Class Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#hardcore_alias-class_method" title="hardcore_alias (class method)">.<strong>hardcore_alias</strong>(*args) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the hardcore alias for the LDAP service.</p>
</div></span>
</li>
</ul>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#alias-instance_method" title="#alias (instance method)">#<strong>alias</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>LDAP server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#default_dispatch_request-instance_method" title="#default_dispatch_request (instance method)">#<strong>default_dispatch_request</strong>(client, data) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Default LDAP request dispatcher.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#dispatch_request-instance_method" title="#dispatch_request (instance method)">#<strong>dispatch_request</strong>(cli, data) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Process client request, handled with dispatch_request_proc if set.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#encode_ldap_response-instance_method" title="#encode_ldap_response (instance method)">#<strong>encode_ldap_response</strong>(msgid, code, dn, msg, tag, context_data = nil, context_code = nil) &#x21d2; Net::BER::BerIdentifiedOid </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Encode response for LDAP client consumption.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(lhost = &#39;0.0.0.0&#39;, lport = 389, udp = true, tcp = true, ldif = nil, comm = nil, auth_provider = nil, ctx = {}, dblock = nil, sblock = nil) &#x21d2; Rex::Proto::LDAP::Server </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Create LDAP Server.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#monitor_listener-instance_method" title="#monitor_listener (instance method)">#<strong>monitor_listener</strong> &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>This method monitors the listener socket for new connections and calls the <code>on_client_connect</code> callback routine.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#on_client_connect-instance_method" title="#on_client_connect (instance method)">#<strong>on_client_connect</strong>(cli) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Extend client for LDAP state.</p>
</div></span>
</li>
<li class="protected ">
<span class="summary_signature">
<a href="#on_client_data-instance_method" title="#on_client_data (instance method)">#<strong>on_client_data</strong>(cli) &#x21d2; Object </a>
</span>
<span class="note title protected">protected</span>
<span class="summary_desc"><div class='inline'>
<p>Processes request coming from client.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#processed_pdu_handler-instance_method" title="#processed_pdu_handler (instance method)">#<strong>processed_pdu_handler</strong>(pdu_type, &amp;proc) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Sets the tasks to be performed after processing of pdu object.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#running%3F-instance_method" title="#running? (instance method)">#<strong>running?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Check if server is running.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#search_result-instance_method" title="#search_result (instance method)">#<strong>search_result</strong>(filter, msgid, attrflt = :all) &#x21d2; Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Search provided ldif data for query information.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#start-instance_method" title="#start (instance method)">#<strong>start</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Start the LDAP server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stop-instance_method" title="#stop (instance method)">#<strong>stop</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Stop the LDAP server.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#suitable_response-instance_method" title="#suitable_response (instance method)">#<strong>suitable_response</strong>(request) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get suitable response for a particular request.</p>
</div></span>
</li>
</ul>
<h3 class="inherited">Methods included from <span class='object_link'><a href="../../IO/GramServer.html" title="Rex::IO::GramServer (module)">IO::GramServer</a></span></h3>
<p class="inherited"><span class='object_link'><a href="../../IO/GramServer.html#send_response-instance_method" title="Rex::IO::GramServer#send_response (method)">#send_response</a></span>, <span class='object_link'><a href="../../IO/GramServer.html#wait-instance_method" title="Rex::IO::GramServer#wait (method)">#wait</a></span></p>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(lhost = &#39;0.0.0.0&#39;, lport = 389, udp = true, tcp = true, ldif = nil, comm = nil, auth_provider = nil, ctx = {}, dblock = nil, sblock = nil) &#x21d2; <tt><span class='object_link'><a href="" title="Rex::Proto::LDAP::Server (class)">Rex::Proto::LDAP::Server</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Create LDAP Server</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>lhost</span>
<span class='type'>(<tt>String</tt>)</span>
<em class="default">(defaults to: <tt>&#39;0.0.0.0&#39;</tt>)</em>
&mdash;
<div class='inline'>
<p>Listener address</p>
</div>
</li>
<li>
<span class='name'>lport</span>
<span class='type'>(<tt>Fixnum</tt>)</span>
<em class="default">(defaults to: <tt>389</tt>)</em>
&mdash;
<div class='inline'>
<p>Listener port</p>
</div>
</li>
<li>
<span class='name'>udp</span>
<span class='type'>(<tt>TrueClass</tt>, <tt>FalseClass</tt>)</span>
<em class="default">(defaults to: <tt>true</tt>)</em>
&mdash;
<div class='inline'>
<p>Listen on UDP socket</p>
</div>
</li>
<li>
<span class='name'>tcp</span>
<span class='type'>(<tt>TrueClass</tt>, <tt>FalseClass</tt>)</span>
<em class="default">(defaults to: <tt>true</tt>)</em>
&mdash;
<div class='inline'>
<p>Listen on TCP socket</p>
</div>
</li>
<li>
<span class='name'>ldif</span>
<span class='type'>(<tt>String</tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>LDIF data</p>
</div>
</li>
<li>
<span class='name'>auth_provider</span>
<span class='type'>(<tt><span class='object_link'><a href="Auth.html" title="Rex::Proto::LDAP::Auth (class)">Rex::Proto::LDAP::Auth</a></span></tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>LDAP Authentication provider which processes authentication</p>
</div>
</li>
<li>
<span class='name'>ctx</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Framework context for sockets</p>
</div>
</li>
<li>
<span class='name'>dblock</span>
<span class='type'>(<tt>Proc</tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>Handler for :dispatch_request flow control interception</p>
</div>
</li>
<li>
<span class='name'>sblock</span>
<span class='type'>(<tt>Proc</tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>Handler for :send_response flow control interception</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 65</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_lhost'>lhost</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>0.0.0.0</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_lport'>lport</span> <span class='op'>=</span> <span class='int'>389</span><span class='comma'>,</span> <span class='id identifier rubyid_udp'>udp</span> <span class='op'>=</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='id identifier rubyid_tcp'>tcp</span> <span class='op'>=</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='id identifier rubyid_ldif'>ldif</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_comm'>comm</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_auth_provider'>auth_provider</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_ctx'>ctx</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='comma'>,</span> <span class='id identifier rubyid_dblock'>dblock</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_sblock'>sblock</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='ivar'>@serve_udp</span> <span class='op'>=</span> <span class='id identifier rubyid_udp'>udp</span>
<span class='ivar'>@serve_tcp</span> <span class='op'>=</span> <span class='id identifier rubyid_tcp'>tcp</span>
<span class='ivar'>@sock_options</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LocalHost</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_lhost'>lhost</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LocalPort</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_lport'>lport</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Context</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_ctx'>ctx</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Comm</span><span class='tstring_end'>&#39;</span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_comm'>comm</span>
<span class='rbrace'>}</span>
<span class='ivar'>@ldif</span> <span class='op'>=</span> <span class='id identifier rubyid_ldif'>ldif</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener_thread'>listener_thread</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dispatch_request_proc'>dispatch_request_proc</span> <span class='op'>=</span> <span class='id identifier rubyid_dblock'>dblock</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_send_response_proc'>send_response_proc</span> <span class='op'>=</span> <span class='id identifier rubyid_sblock'>sblock</span>
<span class='ivar'>@auth_provider</span> <span class='op'>=</span> <span class='id identifier rubyid_auth_provider'>auth_provider</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id=""></span>
<div class="method_details first">
<h3 class="signature first" id="ldif-instance_method">
#<strong>ldif</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute ldif.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_ldif'>ldif</span>
<span class='ivar'>@ldif</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="serve_tcp-instance_method">
#<strong>serve_tcp</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute serve_tcp.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_serve_tcp'>serve_tcp</span>
<span class='ivar'>@serve_tcp</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="serve_udp-instance_method">
#<strong>serve_udp</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute serve_udp.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_serve_udp'>serve_udp</span>
<span class='ivar'>@serve_udp</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="sock_options-instance_method">
#<strong>sock_options</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute sock_options.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_sock_options'>sock_options</span>
<span class='ivar'>@sock_options</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="syntax-instance_method">
#<strong>syntax</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute syntax.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_syntax'>syntax</span>
<span class='ivar'>@syntax</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="tcp_sock-instance_method">
#<strong>tcp_sock</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute tcp_sock.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_tcp_sock'>tcp_sock</span>
<span class='ivar'>@tcp_sock</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id=""></span>
<div class="method_details ">
<h3 class="signature " id="udp_sock-instance_method">
#<strong>udp_sock</strong> &#x21d2; <tt>Object</tt> <span class="extras">(readonly)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute udp_sock.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
10
11
12</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 10</span>
<span class='kw'>def</span> <span class='id identifier rubyid_udp_sock'>udp_sock</span>
<span class='ivar'>@udp_sock</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="class_method_details" class="method_details_list">
<h2>Class Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="hardcore_alias-class_method">
.<strong>hardcore_alias</strong>(*args) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the hardcore alias for the LDAP service</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
330
331
332</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 330</span>
<span class='kw'>def</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_hardcore_alias'>hardcore_alias</span><span class='lparen'>(</span><span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rparen'>)</span>
<span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</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_end'>&#39;</span></span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>1</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='embexpr_end'>}</span><span class='tstring_content'>-</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='int'>4</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="alias-instance_method">
#<strong>alias</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>LDAP server.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
358
359
360</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 358</span>
<span class='kw'>def</span> <span class='kw'>alias</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LDAP Server</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="default_dispatch_request-instance_method">
#<strong>default_dispatch_request</strong>(client, data) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Default LDAP request dispatcher</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>client</span>
<span class='type'>(<tt>Rex::Socket::Tcp</tt>, <tt>Rex::Socket::Udp</tt>)</span>
&mdash;
<div class='inline'>
<p>Client sending the request</p>
</div>
</li>
<li>
<span class='name'>data</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>raw LDAP request data</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 158</span>
<span class='kw'>def</span> <span class='id identifier rubyid_default_dispatch_request'>default_dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_client'>client</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='op'>||</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_strip'>strip</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='label'>ip:</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_peerhost'>peerhost</span><span class='comma'>,</span>
<span class='label'>port:</span> <span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_peerport'>peerport</span><span class='comma'>,</span>
<span class='label'>service_name:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ldap</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='label'>post_pdu:</span> <span class='kw'>false</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_extend'>extend</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>BER</span><span class='op'>::</span><span class='const'>Extensions</span><span class='op'>::</span><span class='const'>String</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_pdu'>pdu</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'>PDU</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_read_ber!'>read_ber!</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>AsnSyntax</span><span class='rparen'>)</span><span class='rparen'>)</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'>LDAP request data remaining: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_data'>data</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='kw'>case</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span>
<span class='kw'>when</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>BindRequest</span>
<span class='id identifier rubyid_user_login'>user_login</span> <span class='op'>=</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_bind_parameters'>bind_parameters</span>
<span class='id identifier rubyid_server_creds'>server_creds</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_context_code'>context_code</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span> <span class='op'>=</span> <span class='ivar'>@auth_provider</span><span class='period'>.</span><span class='id identifier rubyid_process_login_request'>process_login_request</span><span class='lparen'>(</span><span class='id identifier rubyid_user_login'>user_login</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_merge'>merge</span><span class='lparen'>(</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:result_code</span><span class='rbracket'>]</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'>ResultCodeSaslBindInProgress</span>
<span class='id identifier rubyid_server_creds'>server_creds</span> <span class='op'>=</span> <span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:server_creds</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_context_code'>context_code</span> <span class='op'>=</span> <span class='int'>7</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:result_message</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>LDAP Login Attempt =&gt; From:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:ip</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:port</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>\t Username:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:user</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>\t </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:private_type</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:private</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_content'>\t</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:result_message</span><span class='rbracket'>]</span> <span class='op'>+=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'> Domain:</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:domain</span><span class='rbracket'>]</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:domain</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:post_pdu</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:pdu_type</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span>
<span class='id identifier rubyid_encode_ldap_response'>encode_ldap_response</span><span class='lparen'>(</span>
<span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_message_id'>message_id</span><span class='comma'>,</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:result_code</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>ResultStrings</span><span class='lbracket'>[</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:result_code</span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>BindResult</span><span class='comma'>,</span>
<span class='id identifier rubyid_server_creds'>server_creds</span><span class='comma'>,</span>
<span class='id identifier rubyid_context_code'>context_code</span>
<span class='rparen'>)</span>
<span class='kw'>when</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchRequest</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_parse_ldap_filter'>parse_ldap_filter</span><span class='lparen'>(</span><span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_search_parameters'>search_parameters</span><span class='lbracket'>[</span><span class='symbol'>:filter</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>=</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_search_parameters'>search_parameters</span><span class='lbracket'>[</span><span class='symbol'>:attributes</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span> <span class='op'>?</span> <span class='symbol'>:all</span> <span class='op'>:</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_search_parameters'>search_parameters</span><span class='lbracket'>[</span><span class='symbol'>:attributes</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_res'>res</span> <span class='op'>=</span> <span class='id identifier rubyid_search_result'>search_result</span><span class='lparen'>(</span><span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_message_id'>message_id</span><span class='comma'>,</span> <span class='id identifier rubyid_attrs'>attrs</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_result_code'>result_code</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'>ResultCodeNoSuchObject</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_write'>write</span><span class='lparen'>(</span><span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span>
<span class='id identifier rubyid_result_code'>result_code</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'>ResultCodeSuccess</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='lbracket'>[</span><span class='symbol'>:pdu_type</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span>
<span class='id identifier rubyid_encode_ldap_response'>encode_ldap_response</span><span class='lparen'>(</span>
<span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_message_id'>message_id</span><span class='comma'>,</span>
<span class='id identifier rubyid_result_code'>result_code</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>ResultStrings</span><span class='lbracket'>[</span><span class='id identifier rubyid_result_code'>result_code</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchResult</span>
<span class='rparen'>)</span>
<span class='kw'>when</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>UnbindRequest</span>
<span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
<span class='kw'>nil</span>
<span class='kw'>else</span>
<span class='kw'>if</span> <span class='id identifier rubyid_suitable_response'>suitable_response</span><span class='lparen'>(</span><span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span><span class='rparen'>)</span>
<span class='id identifier rubyid_result_code'>result_code</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'>ResultCodeUnwillingToPerform</span>
<span class='id identifier rubyid_encode_ldap_response'>encode_ldap_response</span><span class='lparen'>(</span>
<span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_message_id'>message_id</span><span class='comma'>,</span>
<span class='id identifier rubyid_result_code'>result_code</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>ResultStrings</span><span class='lbracket'>[</span><span class='id identifier rubyid_result_code'>result_code</span><span class='rbracket'>]</span><span class='comma'>,</span>
<span class='id identifier rubyid_suitable_response'>suitable_response</span><span class='lparen'>(</span><span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span><span class='rparen'>)</span>
<span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='ivar'>@pdu_process</span><span class='lbracket'>[</span><span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span><span class='rbracket'>]</span> <span class='op'>&amp;&amp;</span> <span class='op'>!</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='ivar'>@pdu_process</span><span class='lbracket'>[</span><span class='id identifier rubyid_pdu'>pdu</span><span class='period'>.</span><span class='id identifier rubyid_app_tag'>app_tag</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_processed_pdu_data'>processed_pdu_data</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_send_response'>send_response</span><span class='lparen'>(</span><span class='id identifier rubyid_client'>client</span><span class='comma'>,</span> <span class='id identifier rubyid_res'>res</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_res'>res</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</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='id identifier rubyid_e'>e</span><span class='rparen'>)</span>
<span class='id identifier rubyid_client'>client</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="dispatch_request-instance_method">
#<strong>dispatch_request</strong>(cli, data) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Process client request, handled with dispatch_request_proc if set</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>cli</span>
<span class='type'>(<tt>Rex::Socket::Tcp</tt>, <tt>Rex::Socket::Udp</tt>)</span>
&mdash;
<div class='inline'>
<p>Client sending the request</p>
</div>
</li>
<li>
<span class='name'>data</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>raw LDAP request data</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
145
146
147
148
149
150
151</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 145</span>
<span class='kw'>def</span> <span class='id identifier rubyid_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_dispatch_request_proc'>dispatch_request_proc</span>
<span class='id identifier rubyid_dispatch_request_proc'>dispatch_request_proc</span><span class='period'>.</span><span class='id identifier rubyid_call'>call</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_default_dispatch_request'>default_dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</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="encode_ldap_response-instance_method">
#<strong>encode_ldap_response</strong>(msgid, code, dn, msg, tag, context_data = nil, context_code = nil) &#x21d2; <tt>Net::BER::BerIdentifiedOid</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Encode response for LDAP client consumption</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>msgid</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP message identifier</p>
</div>
</li>
<li>
<span class='name'>code</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP message code</p>
</div>
</li>
<li>
<span class='name'>dn</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP distinguished name</p>
</div>
</li>
<li>
<span class='name'>msg</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP response message</p>
</div>
</li>
<li>
<span class='name'>tag</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP response tag</p>
</div>
</li>
<li>
<span class='name'>context_data</span>
<span class='type'>(<tt>String</tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>Additional data to serialize in the sequence</p>
</div>
</li>
<li>
<span class='name'>context_code</span>
<span class='type'>(<tt>Integer</tt>)</span>
<em class="default">(defaults to: <tt>nil</tt>)</em>
&mdash;
<div class='inline'>
<p>Context Specific code related to 'context_data`</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Net::BER::BerIdentifiedOid</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP query response</p>
</div>
</li>
</ul>
</div><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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 256</span>
<span class='kw'>def</span> <span class='id identifier rubyid_encode_ldap_response'>encode_ldap_response</span><span class='lparen'>(</span><span class='id identifier rubyid_msgid'>msgid</span><span class='comma'>,</span> <span class='id identifier rubyid_code'>code</span><span class='comma'>,</span> <span class='id identifier rubyid_dn'>dn</span><span class='comma'>,</span> <span class='id identifier rubyid_msg'>msg</span><span class='comma'>,</span> <span class='id identifier rubyid_tag'>tag</span><span class='comma'>,</span> <span class='id identifier rubyid_context_data'>context_data</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_context_code'>context_code</span> <span class='op'>=</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_tag_sequence'>tag_sequence</span> <span class='op'>=</span> <span class='lbracket'>[</span>
<span class='id identifier rubyid_code'>code</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_enumerated'>to_ber_enumerated</span><span class='comma'>,</span>
<span class='id identifier rubyid_dn'>dn</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span>
<span class='id identifier rubyid_msg'>msg</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span>
<span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_context_data'>context_data</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_context_code'>context_code</span>
<span class='id identifier rubyid_tag_sequence'>tag_sequence</span> <span class='op'>&lt;&lt;</span> <span class='id identifier rubyid_context_data'>context_data</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_contextspecific'>to_ber_contextspecific</span><span class='lparen'>(</span><span class='id identifier rubyid_context_code'>context_code</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='lbracket'>[</span>
<span class='id identifier rubyid_msgid'>msgid</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span>
<span class='id identifier rubyid_tag_sequence'>tag_sequence</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_appsequence'>to_ber_appsequence</span><span class='lparen'>(</span><span class='id identifier rubyid_tag'>tag</span><span class='rparen'>)</span>
<span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="monitor_listener-instance_method">
#<strong>monitor_listener</strong> &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>This method monitors the listener socket for new connections and calls the <code>on_client_connect</code> callback routine.</p>
</div>
</div>
<div class="tags">
</div><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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 368</span>
<span class='kw'>def</span> <span class='id identifier rubyid_monitor_listener'>monitor_listener</span>
<span class='id identifier rubyid_loop'>loop</span> <span class='kw'>do</span>
<span class='id identifier rubyid_rds'>rds</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_udp_sock'>udp_sock</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_wds'>wds</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_eds'>eds</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_udp_sock'>udp_sock</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_r'>r</span><span class='comma'>,</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>IO</span><span class='period'>.</span><span class='id identifier rubyid_select'>select</span><span class='lparen'>(</span><span class='id identifier rubyid_rds'>rds</span><span class='comma'>,</span> <span class='id identifier rubyid_wds'>wds</span><span class='comma'>,</span> <span class='id identifier rubyid_eds'>eds</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='lparen'>(</span><span class='op'>!</span><span class='id identifier rubyid_r'>r</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>&amp;&amp;</span> <span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='id identifier rubyid_udp_sock'>udp_sock</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_buf'>buf</span><span class='comma'>,</span> <span class='id identifier rubyid_host'>host</span><span class='comma'>,</span> <span class='id identifier rubyid_port'>port</span> <span class='op'>=</span> <span class='id identifier rubyid_udp_sock'>udp_sock</span><span class='period'>.</span><span class='id identifier rubyid_recvfrom'>recvfrom</span><span class='lparen'>(</span><span class='int'>65535</span><span class='rparen'>)</span>
<span class='comment'># Mock up a client object for sending back data
</span> <span class='id identifier rubyid_cli'>cli</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="Server/MockLdapClient.html" title="Rex::Proto::LDAP::Server::MockLdapClient (class)">MockLdapClient</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Server/MockLdapClient.html#initialize-instance_method" title="Rex::Proto::LDAP::Server::MockLdapClient#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='id identifier rubyid_host'>host</span><span class='comma'>,</span> <span class='id identifier rubyid_port'>port</span><span class='comma'>,</span> <span class='id identifier rubyid_r'>r</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_extend'>extend</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Server/LdapClient.html" title="Rex::Proto::LDAP::Server::LdapClient (module)">LdapClient</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_init_ldap_client'>init_ldap_client</span>
<span class='id identifier rubyid_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_buf'>buf</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="on_client_connect-instance_method">
#<strong>on_client_connect</strong>(cli) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Extend client for LDAP state</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
405
406
407
408</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 405</span>
<span class='kw'>def</span> <span class='id identifier rubyid_on_client_connect'>on_client_connect</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_extend'>extend</span><span class='lparen'>(</span><span class='const'><span class='object_link'><a href="Server/LdapClient.html" title="Rex::Proto::LDAP::Server::LdapClient (module)">LdapClient</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_init_ldap_client'>init_ldap_client</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="on_client_data-instance_method">
#<strong>on_client_data</strong>(cli) &#x21d2; <tt>Object</tt> <span class="extras">(protected)</span>
</h3><div class="docstring">
<div class="discussion">
<p>Processes request coming from client</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>cli</span>
<span class='type'>(<tt>Rex::Socket::Tcp</tt>)</span>
&mdash;
<div class='inline'>
<p>Client sending request</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
391
392
393
394
395
396
397
398
399
400</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 391</span>
<span class='kw'>def</span> <span class='id identifier rubyid_on_client_data'>on_client_data</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span> <span class='op'>=</span> <span class='id identifier rubyid_cli'>cli</span><span class='period'>.</span><span class='id identifier rubyid_read'>read</span><span class='lparen'>(</span><span class='int'>65535</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='op'>::</span><span class='const'>EOFError</span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_data'>data</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='op'>::</span><span class='const'>EOFError</span> <span class='kw'>if</span> <span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_dispatch_request'>dispatch_request</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='comma'>,</span> <span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'>EOFError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='period'>.</span><span class='id identifier rubyid_close_client'>close_client</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_cli'>cli</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="processed_pdu_handler-instance_method">
#<strong>processed_pdu_handler</strong>(pdu_type, &amp;proc) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Sets the tasks to be performed after processing of pdu object</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>proc</span>
<span class='type'>(<tt>Proc</tt>)</span>
&mdash;
<div class='inline'>
<p>block of code to execute</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
322
323
324
325</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 322</span>
<span class='kw'>def</span> <span class='id identifier rubyid_processed_pdu_handler'>processed_pdu_handler</span><span class='lparen'>(</span><span class='id identifier rubyid_pdu_type'>pdu_type</span><span class='comma'>,</span> <span class='op'>&amp;</span><span class='id identifier rubyid_proc'>proc</span><span class='rparen'>)</span>
<span class='ivar'>@pdu_process</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='ivar'>@pdu_process</span><span class='lbracket'>[</span><span class='id identifier rubyid_pdu_type'>pdu_type</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_proc'>proc</span> <span class='kw'>if</span> <span class='id identifier rubyid_block_given?'>block_given?</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="running?-instance_method">
#<strong>running?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Check if server is running</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
84
85
86</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 84</span>
<span class='kw'>def</span> <span class='id identifier rubyid_running?'>running?</span>
<span class='id identifier rubyid_listener_thread'>listener_thread</span> <span class='kw'>and</span> <span class='id identifier rubyid_listener_thread'>listener_thread</span><span class='period'>.</span><span class='id identifier rubyid_alive?'>alive?</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="search_result-instance_method">
#<strong>search_result</strong>(filter, msgid, attrflt = :all) &#x21d2; <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Search provided ldif data for query information. If no ldif` was provided a random search result will be generated.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>filter</span>
<span class='type'>(<tt>Net::LDAP::Filter</tt>)</span>
&mdash;
<div class='inline'>
<p>LDAP query filter</p>
</div>
</li>
<li>
<span class='name'>attrflt</span>
<span class='type'>(<tt>Array</tt>, <tt>Symbol</tt>)</span>
<em class="default">(defaults to: <tt>:all</tt>)</em>
&mdash;
<div class='inline'>
<p>LDAP attribute filter</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>Query matches</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
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</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 281</span>
<span class='kw'>def</span> <span class='id identifier rubyid_search_result'>search_result</span><span class='lparen'>(</span><span class='id identifier rubyid_filter'>filter</span><span class='comma'>,</span> <span class='id identifier rubyid_msgid'>msgid</span><span class='comma'>,</span> <span class='id identifier rubyid_attrflt'>attrflt</span> <span class='op'>=</span> <span class='symbol'>:all</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='ivar'>@ldif</span><span class='period'>.</span><span class='id identifier rubyid_nil?'>nil?</span> <span class='op'>||</span> <span class='ivar'>@ldif</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span>
<span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attrflt'>attrflt</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attrflt'>attrflt</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_at'>at</span><span class='op'>|</span>
<span class='id identifier rubyid_attrval'>attrval</span> <span class='op'>=</span> <span class='lbracket'>[</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_rand_text_alphanumeric'>rand_text_alphanumeric</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span><span class='rbracket'>]</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_ber</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_set'>to_ber_set</span>
<span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span><span class='id identifier rubyid_at'>at</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span> <span class='id identifier rubyid_attrval'>attrval</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_dn'>dn</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>dc=</span><span class='embexpr_beg'>#{</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_rand_text_alphanumeric'>rand_text_alphanumeric</span><span class='lparen'>(</span><span class='int'>10</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_content'>,dc=</span><span class='embexpr_beg'>#{</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_rand_text_alpha'>rand_text_alpha</span><span class='lparen'>(</span><span class='int'>4</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_appseq'>appseq</span> <span class='op'>=</span> <span class='lbracket'>[</span>
<span class='id identifier rubyid_dn'>dn</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span>
<span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_appsequence'>to_ber_appsequence</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchReturnedData</span><span class='rparen'>)</span>
<span class='lbracket'>[</span><span class='id identifier rubyid_msgid'>msgid</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span> <span class='id identifier rubyid_appseq'>appseq</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_ldif'>ldif</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_bind_dn'>bind_dn</span><span class='comma'>,</span> <span class='id identifier rubyid_entry'>entry</span><span class='op'>|</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_filter'>filter</span><span class='period'>.</span><span class='id identifier rubyid_match'>match</span><span class='lparen'>(</span><span class='id identifier rubyid_entry'>entry</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_entry'>entry</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_k'>k</span><span class='comma'>,</span> <span class='id identifier rubyid_v'>v</span><span class='op'>|</span>
<span class='kw'>if</span> <span class='id identifier rubyid_attrflt'>attrflt</span> <span class='op'>==</span> <span class='symbol'>:all</span> <span class='op'>||</span> <span class='id identifier rubyid_attrflt'>attrflt</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_k'>k</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='rparen'>)</span>
<span class='id identifier rubyid_attrvals'>attrvals</span> <span class='op'>=</span> <span class='id identifier rubyid_v'>v</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_ber</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_set'>to_ber_set</span>
<span class='id identifier rubyid_attrs'>attrs</span> <span class='op'>&lt;&lt;</span> <span class='lbracket'>[</span><span class='id identifier rubyid_k'>k</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span> <span class='id identifier rubyid_attrvals'>attrvals</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_appseq'>appseq</span> <span class='op'>=</span> <span class='lbracket'>[</span>
<span class='id identifier rubyid_bind_dn'>bind_dn</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span>
<span class='id identifier rubyid_attrs'>attrs</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_appsequence'>to_ber_appsequence</span><span class='lparen'>(</span><span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchReturnedData</span><span class='rparen'>)</span>
<span class='lbracket'>[</span><span class='id identifier rubyid_msgid'>msgid</span><span class='period'>.</span><span class='id identifier rubyid_to_ber'>to_ber</span><span class='comma'>,</span> <span class='id identifier rubyid_appseq'>appseq</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_ber_sequence'>to_ber_sequence</span>
<span class='kw'>end</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span><span class='period'>.</span><span class='id identifier rubyid_join'>join</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="start-instance_method">
#<strong>start</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Start the LDAP server</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 91</span>
<span class='kw'>def</span> <span class='id identifier rubyid_start'>start</span>
<span class='kw'>if</span> <span class='id identifier rubyid_serve_udp'>serve_udp</span>
<span class='ivar'>@udp_sock</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'>Socket</span><span class='op'>::</span><span class='const'>Udp</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_sock_options'>sock_options</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener_thread'>listener_thread</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="../../ThreadFactory.html" title="Rex::ThreadFactory (class)">ThreadFactory</a></span></span><span class='period'>.</span><span class='id identifier rubyid_spawn'><span class='object_link'><a href="../../ThreadFactory.html#spawn-class_method" title="Rex::ThreadFactory.spawn (method)">spawn</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>UDPLDAPServerListener</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_monitor_listener'>monitor_listener</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='id identifier rubyid_serve_tcp'>serve_tcp</span>
<span class='ivar'>@tcp_sock</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'>Socket</span><span class='op'>::</span><span class='const'>TcpServer</span><span class='period'>.</span><span class='id identifier rubyid_create'>create</span><span class='lparen'>(</span><span class='id identifier rubyid_sock_options'>sock_options</span><span class='rparen'>)</span>
<span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='period'>.</span><span class='id identifier rubyid_on_client_connect_proc'>on_client_connect_proc</span> <span class='op'>=</span> <span class='id identifier rubyid_proc'>proc</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_cli'>cli</span><span class='op'>|</span>
<span class='id identifier rubyid_on_client_connect'>on_client_connect</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='period'>.</span><span class='id identifier rubyid_on_client_data_proc'>on_client_data_proc</span> <span class='op'>=</span> <span class='id identifier rubyid_proc'>proc</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_cli'>cli</span><span class='op'>|</span>
<span class='id identifier rubyid_on_client_data'>on_client_data</span><span class='lparen'>(</span><span class='id identifier rubyid_cli'>cli</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='comment'># Close UDP socket if TCP socket fails
</span> <span class='kw'>begin</span>
<span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='period'>.</span><span class='id identifier rubyid_start'>start</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_stop'>stop</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>end</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_serve_udp'>serve_udp</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener_thread'>listener_thread</span> <span class='op'>=</span> <span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='period'>.</span><span class='id identifier rubyid_listener_thread'>listener_thread</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='ivar'>@auth_provider</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="../../Proto.html" title="Rex::Proto (module)">Proto</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../LDAP.html" title="Rex::Proto::LDAP (module)">LDAP</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="Auth.html" title="Rex::Proto::LDAP::Auth (class)">Auth</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="Auth.html#initialize-instance_method" title="Rex::Proto::LDAP::Auth#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='comma'>,</span> <span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>self</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stop-instance_method">
#<strong>stop</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Stop the LDAP server</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
127
128
129
130
131
132
133
134
135
136
137
138</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 127</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stop'>stop</span>
<span class='id identifier rubyid_ensure_close'>ensure_close</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_udp_sock'>udp_sock</span><span class='comma'>,</span> <span class='id identifier rubyid_tcp_sock'>tcp_sock</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_compact'>compact</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_listener_thread'>listener_thread</span><span class='period'>.</span><span class='id identifier rubyid_kill'>kill</span> <span class='kw'>if</span> <span class='id identifier rubyid_listener_thread'>listener_thread</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:kill</span><span class='rparen'>)</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_listener_thread'>listener_thread</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>ensure</span>
<span class='kw'>while</span> <span class='id identifier rubyid_csock'>csock</span> <span class='op'>=</span> <span class='id identifier rubyid_ensure_close'>ensure_close</span><span class='period'>.</span><span class='id identifier rubyid_shift'>shift</span>
<span class='id identifier rubyid_csock'>csock</span><span class='period'>.</span><span class='id identifier rubyid_stop'>stop</span> <span class='kw'>if</span> <span class='id identifier rubyid_csock'>csock</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:stop</span><span class='rparen'>)</span>
<span class='id identifier rubyid_csock'>csock</span><span class='period'>.</span><span class='id identifier rubyid_close'>close</span> <span class='kw'>unless</span> <span class='id identifier rubyid_csock'>csock</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:close</span><span class='rparen'>)</span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_csock'>csock</span><span class='period'>.</span><span class='id identifier rubyid_closed?'>closed?</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="suitable_response-instance_method">
#<strong>suitable_response</strong>(request) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get suitable response for a particular request</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>request</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>Type of request</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
340
341
342
343
344
345
346
347
348
349
350
351
352
353</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/rex/proto/ldap/server.rb', line 340</span>
<span class='kw'>def</span> <span class='id identifier rubyid_suitable_response'>suitable_response</span><span class='lparen'>(</span><span class='id identifier rubyid_request'>request</span><span class='rparen'>)</span>
<span class='id identifier rubyid_responses'>responses</span> <span class='op'>=</span> <span class='lbrace'>{</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>BindRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>BindResult</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>SearchResult</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ModifyRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ModifyResponse</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>AddRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>AddResponse</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>DeleteRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>DeleteResponse</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ModifyRDNRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ModifyRDNResponse</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>CompareRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>CompareResponse</span><span class='comma'>,</span>
<span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ExtendedRequest</span> <span class='op'>=&gt;</span> <span class='const'>Net</span><span class='op'>::</span><span class='const'>LDAP</span><span class='op'>::</span><span class='const'>PDU</span><span class='op'>::</span><span class='const'>ExtendedResponse</span>
<span class='rbrace'>}</span>
<span class='id identifier rubyid_responses'>responses</span><span class='lbracket'>[</span><span class='id identifier rubyid_request'>request</span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:04:12 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>