Net::LDAP::DSML(3)

πŸ’… Net::LDAP::DSML β€” A DSML Writer for Net::LDAP πŸ’…

okay so bestie, this is the manual for Net::LDAP::DSML(3) and it's literally a DSML Writer for Net::LDAP and it's giving very niche but very iconic. let's get into it 🫢


✨ SYNOPSIS ✨

bestie, here's the whole vibe for a directory entry:

use Net::LDAP;
use Net::LDAP::DSML;
use IO::File;

my $server = "localhost";
my $file = "testdsml.xml";
my $ldap = Net::LDAP->new($server);

$ldap->bind();

#
# For file i/o
#
my $file = "testdsml.xml";

my $io = IO::File->new($file,"w")
    or die ("failed to open $file as filehandle.$!\n");

my $dsml = Net::LDAP::DSML->new(output => $io, pretty_print => 1 )
    or die ("DSML object creation problem using an output file.\n");
#      OR
#
# For file i/o
#

open (IO,">$file") or die("failed to open $file.$!");

my $dsml = Net::LDAP::DSML->new(output => *IO, pretty_print => 1)
    or die ("DSML object creation problem using an output file.\n");

#      OR
#
# For array usage.
# Pass a reference to an array.
#

my @data = ();
$dsml = Net::LDAP::DSML->new(output => \@data, pretty_print => 1)
    or die ("DSML object creation problem using an output array.\n");

 my $mesg = $ldap->search(
                          base     => 'o=airius.com',
                          scope    => 'sub',
                          filter   => 'ou=accounting',
                          callback => sub {
                                        my ($mesg,$entry) =@_;
                                        $dsml->write_entry($entry)
                                         if (ref $entry eq 'Net::LDAP::Entry');
                                      }
                           );

die ("search failed with ",$mesg->code(),"\n")  if $mesg->code();

and for directory schema? bestie, it's the same energy. a file or array can be used for output, but in the following example only an array will be used:

my $schema = $ldap->schema();
my @data = ();
my $dsml = Net::LDAP::DSML->new(output => \@data, pretty_print => 1 )
     or die ("DSML object creation problem using an output array.\n");

$dsml->write_schema($schema);

print "Finished printing DSML\n";

🌸 DESCRIPTION 🌸

okay so Directory Service Markup Language (DSML) is the XML standard for representing directory service information in XML. it's literally the blueprint. πŸ’…

at the moment this module only writes DSML entry and schema entities. reading DSML entities is a future project. so like, it's a work in progress, but she's serving what she needs to serve. ✨

eventually this module will be a full level 2 consumer and producer enabling you to give you full DSML conformance. currently this module has the ability to be a level 2 producer. the user must understand the his/her directory server will determine the consumer and producer level they can achieve. iykyk.

to determine conformance, it is useful to divide DSML documents into four types:

  1. Documents containing no directory schema nor any references to an external schema.
  2. Documents containing no directory schema but containing at least one reference to an external schema.
  3. Documents containing only a directory schema.
  4. Documents containing both a directory schema and entries.

a producer of DSML must be able to produce documents of type 1. a producer of DSML may, in addition, be able to produce documents of types 2 through 4.

a producer that can produce documents of type 1 is said to be a level 1 producer. a producer than can produce documents of all four types is said to be a level 2 producer. periodt. πŸ‘‘


πŸŽ€ CALLBACKS πŸŽ€

the module uses callbacks to improve performance (at least the appearance of improving performance ;) and to reduce the amount of memory required to parse large DSML files. every time a single entry or schema is processed we pass the Net::LDAP object (either an Entry or Schema object) to the callback routine. so like, it's efficient and cute. πŸ¦‹


πŸ”₯ CONSTRUCTOR πŸ”₯

new ()

creates a new Net::LDAP::DSML object. there are 2 options to this method.

  • "output" is a reference to either a file handle that has already been opened or to an array.
  • "pretty_print" is an option to print a new line at the end of each element sequence. it makes the reading of the XML output easier for a human.

Example:

my $dsml = Net::LDAP::DSML->new();

Prints xml data to standard out.

my $dsml = Net::LDAP::DSML->new(output => \@array);
my $dsml = Net::LDAP::DSML->new(output => *FILE);

Prints xml data to a file or array.

my $dsml = Net::LDAP::DSML->new(output => \@array, pretty_print => 1);
my $dsml = Net::LDAP::DSML->new(output => *FILE, pretty_print => 1);

Prints xml data to a file or array in pretty print style.


🌈 METHODS 🌈

start_dsml ()

Start a DSML file.

end_dsml ()

End a DSML file.

write_entry ( ENTRY )

Entry is a Net::LDAP::Entry object. The write method will parse the LDAP data in the Entry object and put it into DSML XML format.

Example:

my $entry = $mesg->entry();
$dsml->write_entry($entry);

write_schema ( SCHEMA )

Schema is a Net::LDAP::Schema object. The write_schema method will parse the LDAP data in the Schema object and put it into DSML XML format.

Example:

my $schema = $ldap->schema();
$dsml->write_schema($schema);

πŸ’œ AUTHOR πŸ’œ

Graham Barr gbarr@pobox.com


πŸ¦‹ SEE ALSO πŸ¦‹

Net::LDAP, XML::SAX::Base


Copyright (c) 2002-2006 Graham Barr. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.


okay bestie, that's the whole page. this manual page is from perl v5.42.0, dated 2024-01-02, and it's literally iconic. no cap. πŸ’–βœ¨

πŸ“¦ where this page comes from