<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Perl API</title><link>https://sourceforge.net/p/dbis/wiki/Perl%2520API/</link><description>Recent changes to Perl API</description><atom:link href="https://sourceforge.net/p/dbis/wiki/Perl%20API/feed" rel="self"/><language>en</language><lastBuildDate>Wed, 11 Nov 2015 12:00:18 -0000</lastBuildDate><atom:link href="https://sourceforge.net/p/dbis/wiki/Perl%20API/feed" rel="self" type="application/rss+xml"/><item><title>Perl API modified by Mark R. Bannister</title><link>https://sourceforge.net/p/dbis/wiki/Perl%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v2
+++ v3
@@ -7,6 +7,14 @@

 * `dbis-cachemgr` must be running.
 * Perl program must have permission to connect to DBIS client socket (default is `/var/run/dbis/client`).
+
+Online documentation is available through `perldoc`, e.g.
+
+~~~~
+$ perldoc DBIS::Client
+$ perldoc DBIS::Client::Options
+$ perldoc DBIS::Client::API
+~~~~

 By default the data is returned by the API as an array of strings in short format.  Here is a simple example that looks up a single host entry:

&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mark R. Bannister</dc:creator><pubDate>Wed, 11 Nov 2015 12:00:18 -0000</pubDate><guid>https://sourceforge.net273dbfbaed0bb4a44ba78c78289aafe8e71d2ebc</guid></item><item><title>Perl API modified by Mark R. Bannister</title><link>https://sourceforge.net/p/dbis/wiki/Perl%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;pre&gt;--- v1
+++ v2
@@ -45,7 +45,6 @@
 use DBIS::Client;
 use DBIS::Client::API;
 use DBIS::Client::Options qw(DBIS_OPT_JSON);
-use JSON;

 # Initialise client object
 my $client = DBIS::Client-&amp;gt;new(fpdebug =&amp;gt; 1);
&lt;/pre&gt;
&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mark R. Bannister</dc:creator><pubDate>Wed, 11 Nov 2015 11:52:18 -0000</pubDate><guid>https://sourceforge.netc65c523833be6c4e5470b18a27edc3d8fb73f915</guid></item><item><title>Perl API modified by Mark R. Bannister</title><link>https://sourceforge.net/p/dbis/wiki/Perl%2520API/</link><description>&lt;div class="markdown_content"&gt;&lt;h1 id="perl-api"&gt;Perl API&lt;/h1&gt;
&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The Perl API is designed to allow DBIS maps to be queried efficiently from within a third party Perl program.  The API has the following pre-requisites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dbis-cachemgr&lt;/code&gt; must be running.&lt;/li&gt;
&lt;li&gt;Perl program must have permission to connect to DBIS client socket (default is &lt;code&gt;/var/run/dbis/client&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;By default the data is returned by the API as an array of strings in short format.  Here is a simple example that looks up a single host entry:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Initialise client object&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fpdebug&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;# Lookup entry in NSS format&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$cmdobj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;gethostbyname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"kilcher"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cmdobj&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;@$result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The output is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;PERL&lt;/span&gt; &lt;span class="n"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;connecting&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="s"&gt;"/var/run/dbis/client"&lt;/span&gt;
&lt;span class="n"&gt;PERL&lt;/span&gt; &lt;span class="n"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sending&lt;/span&gt; &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"gethostbyname kilcher&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
&lt;span class="mf"&gt;10.11.12.14&lt;/span&gt;     &lt;span class="n"&gt;kilcher&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This output is good for display purposes, but not so good for parsing.  If the data is to be parsed, it would be better represented as a Perl array or hash.  This can also be achieved, by requesting that the server sends the data to the client in JSON format.  Note that the data will be decoded before it is returned from the API:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt; 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt; &lt;span class="sx"&gt;qw(DBIS_OPT_JSON)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;# Initialise client object&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fpdebug&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;# Set-up options&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$opts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;DBIS_OPT_JSON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;# Lookup full entry&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$cmdobj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;gethostbyname&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"kilcher"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$client&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;lookup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cmdobj&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;opts&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$opts&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;Data::&lt;/span&gt;&lt;span class="n"&gt;Dumper&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;Dumper&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The output is:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nt"&gt;PERL&lt;/span&gt; &lt;span class="nt"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;connecting&lt;/span&gt; &lt;span class="nt"&gt;to&lt;/span&gt; &lt;span class="s2"&gt;"/var/run/dbis/client"&lt;/span&gt;
&lt;span class="nt"&gt;PERL&lt;/span&gt; &lt;span class="nt"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;sending&lt;/span&gt; &lt;span class="nt"&gt;command&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set format=json\ngethostbyname kilcher\n"&lt;/span&gt;
&lt;span class="nt"&gt;PERL&lt;/span&gt; &lt;span class="nt"&gt;DEBUG&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;decoding&lt;/span&gt; &lt;span class="nt"&gt;JSON&lt;/span&gt;
&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="nt"&gt;VAR1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;
          &lt;span class="err"&gt;[&lt;/span&gt;
            &lt;span class="s1"&gt;'rn=kilcher,ou=lab,ou=hosts,o=infra'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
              &lt;span class="s1"&gt;'_cfgmap'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;
                             &lt;span class="s1"&gt;'cn=hosts,en=sales.corp,ou=domain-mappings,o=infra'&lt;/span&gt;
                           &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
              &lt;span class="s1"&gt;'macAddress'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                &lt;span class="s1"&gt;'08:00:27:00:50:f2'&lt;/span&gt;
                              &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
              &lt;span class="s1"&gt;'ipv4Address'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                 &lt;span class="s1"&gt;'10.11.12.14'&lt;/span&gt;
                               &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
              &lt;span class="s1"&gt;'rn'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                        &lt;span class="s1"&gt;'kilcher'&lt;/span&gt;
                      &lt;span class="cp"&gt;]&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
              &lt;span class="s1"&gt;'objectClass'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                 &lt;span class="s1"&gt;'top'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                 &lt;span class="s1"&gt;'ipHostObject'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                 &lt;span class="s1"&gt;'ipv4HostObject'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                 &lt;span class="s1"&gt;'ieee802Device'&lt;/span&gt;
                               &lt;span class="cp"&gt;]&lt;/span&gt;
            &lt;span class="err"&gt;}&lt;/span&gt;
          &lt;span class="o"&gt;],&lt;/span&gt;
          &lt;span class="s1"&gt;'1429114785.19419'&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
          &lt;span class="nt"&gt;900&lt;/span&gt;
        &lt;span class="o"&gt;];&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The result is an array containing an array containing a hash.  The outermost array contains:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;LDAP&lt;/span&gt; &lt;span class="n"&gt;search&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt; &lt;span class="n"&gt;last&lt;/span&gt; &lt;span class="n"&gt;updated&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TTL&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The LDAP search result is itself an array containing:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;DN&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dictionary&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The dictionary of attributes contains the attribute type (key) and a list of values.&lt;/p&gt;
&lt;p&gt;If &lt;code&gt;DBIS::Client::API-&amp;gt;gethostbyname()&lt;/code&gt; were called with no specific key, the entire map will be iterated instead.  In this case, if JSON format is requested, the resulting decoded data structure will differ to that of a single value:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="nx"&gt;PERL&lt;/span&gt; &lt;span class="nb"&gt;DEBUG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;connecting&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="s2"&gt;"/var/run/dbis/client"&lt;/span&gt;
&lt;span class="nx"&gt;PERL&lt;/span&gt; &lt;span class="nb"&gt;DEBUG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;sending&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"set format=json&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;gethostbyname *&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nx"&gt;PERL&lt;/span&gt; &lt;span class="nb"&gt;DEBUG&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;decoding&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;
&lt;span class="nv"&gt;$VAR1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="s1"&gt;'None'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;
                      &lt;span class="nx"&gt;undef&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="s1"&gt;'1429115018.40274'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                      &lt;span class="mi"&gt;900&lt;/span&gt;
                    &lt;span class="cp"&gt;]&lt;/span&gt;,
          'www.aja.com' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                             &lt;span class="err"&gt;[&lt;/span&gt;
                               &lt;span class="s1"&gt;'cn=peg.aja.com,ou=rfc2307,o=infra'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                               &lt;span class="p"&gt;{&lt;/span&gt;
                                 &lt;span class="s1"&gt;'_cfgmap'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;
                                                &lt;span class="s1"&gt;'cn=hosts-legacy,ou=rfc2307,en=sales.corp,ou=domain-mappings,o=infra'&lt;/span&gt;
                                              &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'bootParameter' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'root=fs:/nfsroot/peg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'swap=fs:/nfsswap/peg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'dump=fs:/nfsdump/peg'&lt;/span&gt;
                                                    &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'macAddress' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                   &lt;span class="s1"&gt;'00:00:92:90:ee:e2'&lt;/span&gt;
                                                 &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'ipv4Address' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'23.0.7.1'&lt;/span&gt;
                                                  &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'cn' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                           &lt;span class="s1"&gt;'peg.aja.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                           &lt;span class="s1"&gt;'www.aja.com'&lt;/span&gt;
                                         &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'rn' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                           &lt;span class="s1"&gt;'peg.aja.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                           &lt;span class="s1"&gt;'www.aja.com'&lt;/span&gt;
                                         &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'bootFile' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                 &lt;span class="s1"&gt;'mach'&lt;/span&gt;
                                               &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'ipHostNumber' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                     &lt;span class="s1"&gt;'23.0.7.1'&lt;/span&gt;
                                                   &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'objectClass' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'top'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipHost'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'bootableDevice'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ieee802Device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipv4HostObject'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipHostObject'&lt;/span&gt;
                                                  &lt;span class="cp"&gt;]&lt;/span&gt;
                               }
                             ],
                             '1429115018.40191',
                             900
                           ],
... &lt;span class="nt"&gt;&amp;lt;snip&amp;gt;&lt;/span&gt; ...
          'peg.aja.com' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                             &lt;span class="err"&gt;[&lt;/span&gt;
                               &lt;span class="s1"&gt;'cn=peg.aja.com,ou=rfc2307,o=infra'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                               &lt;span class="p"&gt;{&lt;/span&gt;
                                 &lt;span class="s1"&gt;'_cfgmap'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;[&lt;/span&gt;
                                                &lt;span class="s1"&gt;'cn=hosts-legacy,ou=rfc2307,en=sales.corp,ou=domain-mappings,o=infra'&lt;/span&gt;
                                              &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'bootParameter' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'root=fs:/nfsroot/peg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'swap=fs:/nfsswap/peg'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                      &lt;span class="s1"&gt;'dump=fs:/nfsdump/peg'&lt;/span&gt;
                                                    &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'macAddress' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                   &lt;span class="s1"&gt;'00:00:92:90:ee:e2'&lt;/span&gt;
                                                 &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'ipv4Address' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'23.0.7.1'&lt;/span&gt;
                                                  &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'cn' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                           &lt;span class="s1"&gt;'peg.aja.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                           &lt;span class="s1"&gt;'www.aja.com'&lt;/span&gt;
                                         &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'rn' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                           &lt;span class="s1"&gt;'peg.aja.com'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                           &lt;span class="s1"&gt;'www.aja.com'&lt;/span&gt;
                                         &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'bootFile' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                 &lt;span class="s1"&gt;'mach'&lt;/span&gt;
                                               &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'ipHostNumber' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                     &lt;span class="s1"&gt;'23.0.7.1'&lt;/span&gt;
                                                   &lt;span class="cp"&gt;]&lt;/span&gt;,
                                 'objectClass' =&amp;gt; &lt;span class="cp"&gt;[&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'top'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipHost'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'bootableDevice'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ieee802Device'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipv4HostObject'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                                    &lt;span class="s1"&gt;'ipHostObject'&lt;/span&gt;
                                                  &lt;span class="cp"&gt;]&lt;/span&gt;
                               }
                             ],
                             '1429115018.40191',
                             900
                           ]
        };
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is a hash, where the key in the hash is the key of the entry and the value is the &lt;code&gt;[LDAP search result, time last updated, TTL]&lt;/code&gt; array.  The &lt;code&gt;None&lt;/code&gt; entry represents when the entire map was last updated, i.e. the last time someone iterated through every entry in the map.&lt;/p&gt;
&lt;p&gt;There are multiple methods per map.  To obtain a full list of available methods and their supported parameters, run:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;perldoc&lt;/span&gt; &lt;span class="n"&gt;DBIS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;API&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;h2 id="server-control-messages"&gt;Server control messages&lt;/h2&gt;
&lt;p&gt;It is possible to modify the data that the &lt;code&gt;dbis-cachemgr&lt;/code&gt; server sends back to the client.  This is achieved using options that are passed through by the &lt;code&gt;DBIS::Client::lookup()&lt;/code&gt; method to the server socket.&lt;/p&gt;
&lt;p&gt;These messages are set-up in a &lt;code&gt;DBIS::Client::Options&lt;/code&gt; object that is passed to the &lt;code&gt;opts&lt;/code&gt; parameter to &lt;code&gt;DBIS::Client::initialise()&lt;/code&gt; or &lt;code&gt;DBIS::Client::lookup()&lt;/code&gt;.  For example, to request that the result should be returned as a Perl data type (i.e. JSON format during transfer) and sorted:&lt;/p&gt;
&lt;table class="codehilitetable"&gt;&lt;tr&gt;&lt;td class="linenos"&gt;&lt;div class="linenodiv"&gt;&lt;pre&gt;1
2
3
4
5
6
7&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class="code"&gt;&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt; &lt;span class="sx"&gt;qw(DBIS_OPT_JSON)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$opts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nn"&gt;DBIS::Client::&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;format&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;DBIS_OPT_JSON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sort&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="nv"&gt;$opts&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s"&gt;"\n"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;The supported parameters to &lt;code&gt;DBIS::Client::Options-&amp;gt;new()&lt;/code&gt; are summarised in the table below.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Keyword&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_NSS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Change output format to NSS-style.  This is the default output style.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_STR&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Change output format to string representation of Python data type.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_JSON&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Change output format to JSON.  The Perl API will decode the data before returning to the caller.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_JSON_RAW&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Return raw JSON output.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_PICKLE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Change output format to pickled representation of Python data type.  Data is returned in this format.  This is used primarily by the test suite (written in Python) when it is testing the Perl API.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;format&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DBIS_OPT_STREAM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Change output format to binary data stream, the format used by the NSS library.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getnetgrent_recurse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request that a subsequent &lt;code&gt;getnetgrent&lt;/code&gt; lookup should recurse member netgroups.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;getnetgrent_recurse&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Request that a subsequent &lt;code&gt;getnetgrent&lt;/code&gt; lookup should not recurse member netgroups, i.e. netgroup members will be listed by netgroup name.  This is the default.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Result should be sorted.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;sort&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Result should not be sorted.  This is the default.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;There is also online help available:&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;perldoc&lt;/span&gt; &lt;span class="n"&gt;DBIS&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Client&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Options&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;For more information on the other components of DBIS, see &lt;a class="alink" href="/p/dbis/wiki/Using%20DBIS"&gt;[Using DBIS]&lt;/a&gt;.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Mark R. Bannister</dc:creator><pubDate>Thu, 16 Apr 2015 06:26:35 -0000</pubDate><guid>https://sourceforge.neta7ca7b79eab91ea3fb0ea08fed5579b2da6743b0</guid></item></channel></rss>