Sophie

Sophie

distrib > Fedora > 17 > i386 > media > updates > by-pkgid > b50d8ee6d7871fcc13c0677a9364ed59 > files > 474

bcfg2-doc-1.3.0-1.fc17.noarch.rpm



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>Ldap &mdash; Bcfg2 1.3.0 documentation</title>
    
    <link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../../../',
        VERSION:     '1.3.0',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../../../_static/jquery.js"></script>
    <script type="text/javascript" src="../../../_static/underscore.js"></script>
    <script type="text/javascript" src="../../../_static/doctools.js"></script>
    <script type="text/javascript" src="../../../_static/sidebar.js"></script>
    <link rel="shortcut icon" href="../../../_static/favicon.ico"/>
    <link rel="top" title="Bcfg2 1.3.0 documentation" href="../../../index.html" />
    <link rel="up" title="Plugins" href="../index.html" />
    <link rel="next" title="Metadata" href="metadata.html" />
    <link rel="prev" title="GroupPatterns" href="grouppatterns.html" />
 
<link rel="stylesheet" href="../../../_static/bcfg2.css" type=""/>

  </head>
  <body>

<div style="text-align: left; padding: 10px 10px 15px 15px">
<a href="../../../index.html"><img src="../../../_static/bcfg2_logo.png" border="0" alt="sampledoc"/></a>
</div>

    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../../../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="metadata.html" title="Metadata"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="grouppatterns.html" title="GroupPatterns"
             accesskey="P">previous</a> |</li>
	<li><a href="../../../index.html">home</a> |&nbsp;</li>
	<!--<li><a href="../../../search.html">search</a> |&nbsp;</li>-->
	<li><a href="../../../help/index.html">help</a> |&nbsp;</li>
	<li><a href="../../../contents.html">documentation </a> &raquo;</li>

          <li><a href="../../../contents.html" >Bcfg2 documentation 1.3.0</a> &raquo;</li>
          <li><a href="../../index.html" >The Bcfg2 Server</a> &raquo;</li>
          <li><a href="../index.html" accesskey="U">Plugins</a> &raquo;</li> 
      </ul>
    </div>
  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="ldap">
<span id="server-plugins-grouping-ldap"></span><h1>Ldap<a class="headerlink" href="#ldap" title="Permalink to this headline">¶</a></h1>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">This plugin is considered experimental and has known issues (see below).</p>
</div>
<div class="section" id="purpose">
<h2>Purpose<a class="headerlink" href="#purpose" title="Permalink to this headline">¶</a></h2>
<p>This plugin makes it possible to fetch data from an LDAP directory, process it
and attach it to your metadata.</p>
</div>
<div class="section" id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h2>
<p>First, you need to install the <a class="reference external" href="http://www.python-ldap.org/">python-ldap library</a>. On debian-based systems this is
accomplished by:</p>
<div class="highlight-python"><pre>aptitude install python-ldap</pre>
</div>
<p>To enable the plugin, add &#8220;Ldap&#8221; to the plugins line in your <tt class="docutils literal"><span class="pre">bcfg2.conf</span></tt>.
Then add a new directory called &#8220;Ldap&#8221; to the root of your Bcfg2 repository and
define your queries in a file called <tt class="docutils literal"><span class="pre">config.py</span></tt> using the information in the
next section.</p>
</div>
<div class="section" id="configuration">
<h2>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline">¶</a></h2>
<p>As processing LDAP search results can get pretty complex, the configuration has
to be written in Python.</p>
<p>Here is a minimal example to get you started:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">Bcfg2.Server.Plugins.Ldap</span> <span class="kn">import</span> <span class="n">LdapConnection</span><span class="p">,</span> <span class="n">LdapQuery</span><span class="p">,</span> <span class="n">LdapSubQuery</span><span class="p">,</span> <span class="n">register_query</span>

<span class="n">conn_default</span> <span class="o">=</span> <span class="n">LdapConnection</span><span class="p">()</span>
<span class="n">conn_default</span><span class="o">.</span><span class="n">binddn</span> <span class="o">=</span> <span class="s">&quot;uid=example,ou=People,dc=example,dc=com&quot;</span>
<span class="n">conn_default</span><span class="o">.</span><span class="n">bindpw</span> <span class="o">=</span> <span class="s">&quot;foobat&quot;</span>

<span class="nd">@register_query</span>
<span class="k">class</span> <span class="nc">ExampleQuery</span><span class="p">(</span><span class="n">LdapQuery</span><span class="p">):</span>
    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;example&quot;</span>
    <span class="n">base</span> <span class="o">=</span> <span class="s">&quot;ou=People,dc=example,dc=com&quot;</span>
    <span class="n">scope</span> <span class="o">=</span> <span class="s">&quot;one&quot;</span>
    <span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;cn&quot;</span><span class="p">,</span> <span class="s">&quot;uid&quot;</span><span class="p">]</span>
    <span class="n">connection</span> <span class="o">=</span> <span class="n">conn_default</span>

    <span class="k">def</span> <span class="nf">prepare_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="s">&quot;(personalServer=&quot;</span> <span class="o">+</span> <span class="n">metadata</span><span class="o">.</span><span class="n">hostname</span> <span class="o">+</span> <span class="s">&quot;)&quot;</span>

    <span class="k">def</span> <span class="nf">process_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">):</span>
        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">:</span>
            <span class="n">admin_uid</span> <span class="o">=</span> <span class="bp">None</span>
            <span class="n">admin_name</span> <span class="o">=</span> <span class="s">&quot;This server has no admin.&quot;</span>
        <span class="k">return</span> <span class="p">{</span>
            <span class="s">&quot;admin_uid&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">][</span><span class="s">&quot;uid&quot;</span><span class="p">],</span>
            <span class="s">&quot;admin_name&quot;</span> <span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">][</span><span class="s">&quot;cn&quot;</span><span class="p">]</span>
        <span class="p">}</span>
</pre></div>
</div>
<p>The first line provides three classes for dealing with connections and queries
(details below) and a decorator function for registering your queries with the plugin.</p>
<p>In this example our LDAP directory has a number of user objects in it. Each of those
may have a personal server they administer. Whenever metadata for this machine is being
generated by the Bcfg2 server, the UID and name of the admin are retrieved from LDAP.</p>
<p>In your bundles and config templates, you can access this data via the metadata object:</p>
<div class="highlight-python"><pre>${metadata.Ldap["example"]["admin_name"]}</pre>
</div>
</div>
<div class="section" id="class-reference">
<h2>Class reference<a class="headerlink" href="#class-reference" title="Permalink to this headline">¶</a></h2>
<div class="section" id="ldapconnection">
<h3>LdapConnection<a class="headerlink" href="#ldapconnection" title="Permalink to this headline">¶</a></h3>
<dl class="class">
<dt id="LdapConnection">
<em class="property">class </em><tt class="descname">LdapConnection</tt><a class="headerlink" href="#LdapConnection" title="Permalink to this definition">¶</a></dt>
<dd><p>This class represents an LDAP connection. Every query must be associated with exactly
one connection.</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapConnection.binddn">
<tt class="descclassname">LdapConnection.</tt><tt class="descname">binddn</tt><a class="headerlink" href="#LdapConnection.binddn" title="Permalink to this definition">¶</a></dt>
<dd><p>DN used to authenticate against LDAP (required).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapConnection.bindpw">
<tt class="descclassname">LdapConnection.</tt><tt class="descname">bindpw</tt><a class="headerlink" href="#LdapConnection.bindpw" title="Permalink to this definition">¶</a></dt>
<dd><p>Password for the previously mentioned <strong>binddn</strong> (required).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapConnection.host">
<tt class="descclassname">LdapConnection.</tt><tt class="descname">host</tt><a class="headerlink" href="#LdapConnection.host" title="Permalink to this definition">¶</a></dt>
<dd><p>Hostname of host running the LDAP server (defaults to &#8220;localhost&#8221;).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapConnection.port">
<tt class="descclassname">LdapConnection.</tt><tt class="descname">port</tt><a class="headerlink" href="#LdapConnection.port" title="Permalink to this definition">¶</a></dt>
<dd><p>Port where LDAP server is listening (defaults to 389).</p>
</dd></dl>

<p>You may pass any of these attributes as keyword arguments when creating the connection object.</p>
</div>
<div class="section" id="ldapquery">
<h3>LdapQuery<a class="headerlink" href="#ldapquery" title="Permalink to this headline">¶</a></h3>
<dl class="class">
<dt id="LdapQuery">
<em class="property">class </em><tt class="descname">LdapQuery</tt><a class="headerlink" href="#LdapQuery" title="Permalink to this definition">¶</a></dt>
<dd><p>This class defines a single query that may adapt itself depending on the current metadata.</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.attrs">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">attrs</tt><a class="headerlink" href="#LdapQuery.attrs" title="Permalink to this definition">¶</a></dt>
<dd><p>Can be used to retrieve only a certain subset of attributes. May either be a list of
strings (attribute names) or <tt class="docutils literal"><span class="pre">None</span></tt>, meaning all attributes (defaults to <tt class="docutils literal"><span class="pre">None</span></tt>).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.base">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">base</tt><a class="headerlink" href="#LdapQuery.base" title="Permalink to this definition">¶</a></dt>
<dd><p>This is the search base. Only LDAP entries below this DN will be included in your
search results (required).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.connection">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">connection</tt><a class="headerlink" href="#LdapQuery.connection" title="Permalink to this definition">¶</a></dt>
<dd><p>Set this to an instance of the LdapConnection class (required).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.filter">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">filter</tt><a class="headerlink" href="#LdapQuery.filter" title="Permalink to this definition">¶</a></dt>
<dd><p>LDAP search filter used to narrow down search results (defaults to <tt class="docutils literal"><span class="pre">(objectClass=*)</span></tt>).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.name">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">name</tt><a class="headerlink" href="#LdapQuery.name" title="Permalink to this definition">¶</a></dt>
<dd><p>This will be used as the dictionary key that provides access to the query results from
the metadata object (<tt class="docutils literal"><span class="pre">metadata.Ldap[&quot;NAMEGOESHERE&quot;]</span></tt>) (required).</p>
</dd></dl>

<dl class="attribute">
<dt id="LdapQuery.scope">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">scope</tt><a class="headerlink" href="#LdapQuery.scope" title="Permalink to this definition">¶</a></dt>
<dd><p>Set this to one of &#8220;base&#8221;, &#8220;one&#8221; or &#8220;sub&#8221; to specify LDAP search depth (defaults to &#8220;sub&#8221;).</p>
</dd></dl>

<dl class="method">
<dt id="LdapQuery.is_applicable">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">is_applicable</tt><big>(</big><em>self</em>, <em>metadata</em><big>)</big><a class="headerlink" href="#LdapQuery.is_applicable" title="Permalink to this definition">¶</a></dt>
<dd><p>You can override this method to indicate whether this query makes sense for a given
set of metadata (e.g. you need a query only for a certain bundle or group).</p>
<p>(defaults to returning True)</p>
</dd></dl>

<dl class="method">
<dt id="LdapQuery.prepare_query">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">prepare_query</tt><big>(</big><em>self</em>, <em>metadata</em><big>)</big><a class="headerlink" href="#LdapQuery.prepare_query" title="Permalink to this definition">¶</a></dt>
<dd><p>Override this method to alter the query prior to execution. This is useful if your filter
depends on the current metadata, e.g.:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="s">&quot;(cn=&quot;</span> <span class="o">+</span> <span class="n">metadata</span><span class="o">.</span><span class="n">hostname</span> <span class="o">+</span> <span class="s">&quot;)&quot;</span>
</pre></div>
</div>
<p>(defaults to doing nothing)</p>
</dd></dl>

<dl class="method">
<dt id="LdapQuery.process_result">
<tt class="descclassname">LdapQuery.</tt><tt class="descname">process_result</tt><big>(</big><em>self</em>, <em>metadata</em><big>)</big><a class="headerlink" href="#LdapQuery.process_result" title="Permalink to this definition">¶</a></dt>
<dd><p>You will probably override this method in every query to reformat the results from LDAP.
The raw result is stored in <tt class="docutils literal"><span class="pre">self.result</span></tt>, you must return the altered data. Note that LDAP
search results are presented in this structure:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="p">(</span>
    <span class="p">(</span><span class="s">&quot;DN of first entry returned&quot;</span><span class="p">,</span>
        <span class="p">{</span>
            <span class="s">&quot;firstAttribute&quot;</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
            <span class="s">&quot;secondAttribute&quot;</span> <span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
        <span class="p">}</span>
    <span class="p">),</span>
    <span class="p">(</span><span class="s">&quot;DN of second entry returned&quot;</span><span class="p">,</span>
        <span class="p">{</span>
            <span class="s">&quot;firstAttribute&quot;</span> <span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
            <span class="s">&quot;secondAttribute&quot;</span> <span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
        <span class="p">}</span>
    <span class="p">),</span>
<span class="p">)</span>
</pre></div>
</div>
<p>Therefore, to return just the value of the firstAttribute of the second object returned,
you&#8217;d write:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="mi">1</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
</pre></div>
</div>
<p>(defaults to returning <tt class="docutils literal"><span class="pre">self.result</span></tt> unaltered)</p>
</dd></dl>

</div>
<div class="section" id="ldapsubquery">
<h3>LdapSubQuery<a class="headerlink" href="#ldapsubquery" title="Permalink to this headline">¶</a></h3>
<dl class="class">
<dt id="LdapSubQuery">
<em class="property">class </em><tt class="descname">LdapSubQuery</tt><a class="headerlink" href="#LdapSubQuery" title="Permalink to this definition">¶</a></dt>
<dd><p>Sometimes you need more than one query to obtain the data you need (e.g. use the first
query to return all websites running on metadata.hostname and another query to find all
customers that should have access to those sites).</p>
<p>LdapSubQueries are the same as LdapQueries, except for that the methods</p>
<ul class="simple">
<li><tt class="docutils literal"><span class="pre">get_result()</span></tt></li>
<li><tt class="docutils literal"><span class="pre">prepare_query()</span></tt></li>
<li><tt class="docutils literal"><span class="pre">process_result()</span></tt></li>
</ul>
<p>allow any additional keyword arguments that may contain additional data as needed. Note
that <tt class="docutils literal"><span class="pre">get_result()</span></tt> will call <tt class="docutils literal"><span class="pre">prepare_query()</span></tt> and <tt class="docutils literal"><span class="pre">process_result()</span></tt> for you,
so you shouldn&#8217;t ever need to invoke these yourself, just override them.</p>
</dd></dl>

<p>Here is another example that uses LdapSubQuery:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">WebSitesQuery</span><span class="p">(</span><span class="n">LdapSubQuery</span><span class="p">):</span>
    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;web_sites&quot;</span>
    <span class="nb">filter</span> <span class="o">=</span> <span class="s">&quot;(objectClass=webHostingSite)&quot;</span>
    <span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;dc&quot;</span><span class="p">]</span>
    <span class="n">connection</span> <span class="o">=</span> <span class="n">conn_default</span>

    <span class="k">def</span> <span class="nf">prepare_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">,</span> <span class="n">base_dn</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">=</span> <span class="n">base_dn</span>

    <span class="k">def</span> <span class="nf">process_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">):</span>
        <span class="p">[</span><span class="o">...</span><span class="p">]</span> <span class="c"># build sites dict from returned dc attributes</span>
        <span class="k">return</span> <span class="n">sites</span>

<span class="nd">@register_query</span>
<span class="k">class</span> <span class="nc">WebPackagesQuery</span><span class="p">(</span><span class="n">LdapQuery</span><span class="p">):</span>
    <span class="n">name</span> <span class="o">=</span> <span class="s">&quot;web_packages&quot;</span>
    <span class="n">base</span> <span class="o">=</span> <span class="s">&quot;dc=example,dc=com&quot;</span>
    <span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="s">&quot;customerId&quot;</span><span class="p">]</span>
    <span class="n">connection</span> <span class="o">=</span> <span class="n">conn_default</span>

    <span class="k">def</span> <span class="nf">prepare_query</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">):</span>
        <span class="bp">self</span><span class="o">.</span><span class="n">filter</span> <span class="o">=</span> <span class="s">&quot;(&amp;(objectClass=webHostingPackage)(cn:dn:=&quot;</span> <span class="o">+</span> <span class="n">metadata</span><span class="o">.</span><span class="n">hostname</span> <span class="o">+</span> <span class="s">&quot;))&quot;</span>

    <span class="k">def</span> <span class="nf">process_result</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">metadata</span><span class="p">):</span>
        <span class="n">customers</span> <span class="o">=</span> <span class="p">{}</span>
        <span class="k">for</span> <span class="n">customer</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">result</span><span class="p">:</span>
            <span class="n">dn</span> <span class="o">=</span> <span class="n">customer</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
            <span class="n">cid</span> <span class="o">=</span> <span class="n">customer</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s">&quot;customerId&quot;</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
            <span class="n">customers</span><span class="p">[</span><span class="n">cid</span><span class="p">][</span><span class="s">&quot;sites&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">WebSitesQuery</span><span class="p">()</span><span class="o">.</span><span class="n">get_result</span><span class="p">(</span><span class="n">metadata</span><span class="p">,</span> <span class="n">base_dn</span> <span class="o">=</span> <span class="n">dn</span><span class="p">)</span>
        <span class="k">return</span> <span class="n">customers</span>
</pre></div>
</div>
<p>This example assumes that we have a number of webhosting packages that contain various
sites. We need a first query (&#8220;web_packages&#8221;) to get a list of the packages our customers
have and another query for each of those to find out what sites are contained in each
package. The magic happens in the second class where <tt class="docutils literal"><span class="pre">WebSitesQuery.get_result()</span></tt> is
called with the additional <tt class="docutils literal"><span class="pre">base_dn</span></tt> parameter that allows our LdapSubQuery to only
search below that DN.</p>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p class="last">Do NOT apply the <tt class="docutils literal"><span class="pre">register_query</span></tt> decorator to LdapSubQueries.</p>
</div>
</div>
</div>
<div class="section" id="known-issues">
<h2>Known Issues<a class="headerlink" href="#known-issues" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
<li>At this point there is no support for SSL/TLS.</li>
</ul>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../../../index.html">Table Of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">Ldap</a><ul>
<li><a class="reference internal" href="#purpose">Purpose</a></li>
<li><a class="reference internal" href="#installation">Installation</a></li>
<li><a class="reference internal" href="#configuration">Configuration</a></li>
<li><a class="reference internal" href="#class-reference">Class reference</a><ul>
<li><a class="reference internal" href="#ldapconnection">LdapConnection</a></li>
<li><a class="reference internal" href="#ldapquery">LdapQuery</a></li>
<li><a class="reference internal" href="#ldapsubquery">LdapSubQuery</a></li>
</ul>
</li>
<li><a class="reference internal" href="#known-issues">Known Issues</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="grouppatterns.html"
                        title="previous chapter">GroupPatterns</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="metadata.html"
                        title="next chapter">Metadata</a></p>
  <h3>This Page</h3>
  <ul class="this-page-menu">
    <li><a href="../../../_sources/server/plugins/grouping/ldap.txt"
           rel="nofollow">Show Source</a></li>
  </ul>
<div id="searchbox" style="display: none">
  <h3>Quick search</h3>
    <form class="search" action="../../../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    <p class="searchtip" style="font-size: 90%">
    Enter search terms or a module, class or function name.
    </p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../../../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../../../py-modindex.html" title="Python Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="metadata.html" title="Metadata"
             >next</a> |</li>
        <li class="right" >
          <a href="grouppatterns.html" title="GroupPatterns"
             >previous</a> |</li>
	<li><a href="../../../index.html">home</a> |&nbsp;</li>
	<!--<li><a href="../../../search.html">search</a> |&nbsp;</li>-->
	<li><a href="../../../help/index.html">help</a> |&nbsp;</li>
	<li><a href="../../../contents.html">documentation </a> &raquo;</li>

          <li><a href="../../../contents.html" >Bcfg2 documentation 1.3.0</a> &raquo;</li>
          <li><a href="../../index.html" >The Bcfg2 Server</a> &raquo;</li>
          <li><a href="../index.html" >Plugins</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
        &copy; Copyright 2009-2013, Narayan Desai.
      Last updated on Mar 20, 2013.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
    </div>
  </body>
</html>