The Mozilla
Organization
Our Mission
Who We Are
Getting Involved
Community
Editorials
What's New
Newsbot
Development
Roadmap
Module Owners
Blue Sky
Projects
Status
Tools
Products
Source Code
Binaries
Documentation
License Terms
Bug Reports
Quality
Search
Feedback

PerLDAP: Frequently Asked Questions

$Revision: 1.47 $

Contact: Leif Hedstrom
<leif@netscape.com>
Discussion: netscape.public.mozilla.directory


These are the most Frequently Asked Questions about the PerLDAP source and distributions from mozilla.org. A few of these questions will most likely be merged into the official POD documentation, in a later release. The questions are divided into these sections:

  1. General information about PerLDAP.
  2. Using and building PerLDAP from the source.
  3. Binary distributions and released versions.
  4. Working with the source, CVS and bug reports.
  5. LDAP related questions.
  6. Platform, Perl and version specific problems.
  7. Known bugs and problems.
  8. Missing features and modules.

Recent changes to this document

1999-03-09:
  • Cleaned up a bunch of the FAQs, to clarify v1.2/v1.2.1/issues.
  • Added Q-5.10, giving an example how to do simple authentication of users against the LDAP server.
  • Added Q-6.9, describing how to compile and install PerLDAP in a non-standard directory.
  • Added possible (partial) solution for memory issues to Q-7.2.
1999-01-30:
  • Updated a lot of text for the release of PerLDAP v1.2, changing from v1.0 and v1.1 where appropriate.
  • Added more CVS tags to Q-4.4.
1999-01-26:
  • Added information about the C-SDK, to Q-2.7, and Q-3.5
  • To anticipate the PerLDAP v1.2 release, I added Q-5.9, and Q-7.4. This explains how to create new LDAP entries, and also describes an incompatible change that's made to v1.2.
1999-01-15:
  • Changed ActiveState information, and added a known problem with ActivePerl, Q-7.3.

1. General information about PerLDAP

  1. What is PerLDAP?
  2. Where can I get source code for PerLDAP?
  3. Where can I get binary distributions?
  4. Where do I send bug reports, or ask for help?
  5. What about Ldapp? How can I migrate to PerLDAP?
  6. Does PerLDAP support SSL?
  7. Do you have some links to relevant LDAP sites?

2. Using and building PerLDAP from the source

  1. How do I get the source code?
  2. What do I need to build PerLDAP?
  3. What's the latest PerLDAP version?
  4. Where are the beta/development releases?
  5. Why doesn't PerLDAP v1.0 build with Mozilla SDK?
  6. I built with Mozilla C-SDK, now why can't PerLDAP resolve ldap_init() and other symbols?
  7. Do I really need the C-SDK?

3. Binary distributions and released versions

  1. Where can I find a binary distribution for platform <XXX>?
  2. What's the latest released binary version?
  3. Why is the "Perl_tmps_floor" symbol missing??
  4. I can't get the v1.0 binary distribution to work with Perl v<Y.Z>.
  5. Where are the C-SDK binaries?

4. Working with the source, CVS and bug reports

  1. What the heck is CVS? How do I use it? Where can I get it?
  2. How do I check out the latest, stable released code?
  3. How do I check out a beta/development branch?
  4. Is there a list of all development branches?
  5. What CVS modules are available and relevant to PerLDAP?
  6. Where do I send patches or new code I'd like to contribute?
  7. How do I report a bug I just found?
  8. Where can I read about known, open bugs?

5. LDAP related questions

  1. How do I "browse" an LDAP entry when I know it's DN?
  2. How can I manage my Netscape DS-4 server information with PerLDAP?
  3. What is the "manage DSA IT" control? Can I use it with PerLDAP?
  4. Does PerLDAP support all LDAP v3 features?
  5. How do I search for something? What is an LDAP filter?
  6. How do I specify/limit what attributes are retrieved in a search?
  7. How can I call an LDAP API function, when it needs the internal C SDK structures?
  8. How can I count the number of entries a search found?
  9. How do I create a new LDAP entry?
  10. How do I authenticate a user against the LDAP server?

6. Platform, Perl and version specific problems

  1. What Perl versions are supported?
  2. Which Perl version is recommended?
  3. Which Unix and Windows platforms are supported, and which versions?
  4. How do I get PerLDAP to build on my Windows/NT machine? Why can't NT find libldap.dll?
  5. What C SDKs are supported? What about SSL?
  6. What is the build options for DecUnix/OSF? What is "-taso"?
  7. What link options are used/needed for Irix?
  8. Why are there missing symbols when linking PerLDAP on Windows/NT?
  9. How do I compile and install PerLDAP in a test environment?

7. Known bugs and problems

  1. I can't get PerLDAP to work with ActivePerl.
  2. Is it just me, or is PerLDAP very memory intensive?
  3. I'm still having problems with ActivePerl.
  4. I upgraded to PerLDAP v1.2, and my scripts can no longer add new LDAP entries, why?

8. Missing features and modules

  1. What about LDAP controls?
  2. How can I use and support the LDAP v3 password management control?
  3. Does PerLDAP support VLV indexes?
  4. The LDIF module seems horky, what gives?
  5. Are there any PerLDAP code to manage LDAP schemas?
  6. What are the plans for the next PerLDAP version?

1. General information about PerLDAP

  1. What is PerLDAP?

    PerLDAP, Perl-LDAP, is made up of two main components to write LDAP clients: An interface to the C SDK API, and a set of Object Oriented Perl classes. The API interface is almost 100% compatible with Netscape's C SDK, but it's harder to use than the OO layer. The Object oriented interface is ment to be an easier way to write most common LDAP clients. For more information, see the Mozilla Directory project home page.

    I've also prepared a PerLDAP presentation in PowerPoint, which is available in HTML as well.

  2. Where can I get source code for PerLDAP?

    The source is available via both CVS and FTP. You can use Mozilla's CVS server to easily keep up to date with latest releases and development. For more information about relevant CVS modules to check out, see question 4.5.

    If you don't have access to CVS, or want to quickly get the latest CVS release, you can FTP a source distribution. After unpacking such a distribution, you can again use CVS to get updates etc.

  3. Where can I get binary distributions?

    A few unsupported binary distributions are available from Netscape's DevEdge Online, Directory Developer Central. You can download both C SDK distributions, and PerLDAP binaries. Currently only v1.0 PerLDAP has been released, for Solaris and Windows/NT. Binaries for v1.2.1 will be created for a few selected platforms.

    ActiveState also supports PerLDAP for their ActivePerl builds, check out their Web site.

  4. Where do I send bug reports, or ask for help?

    Please use the News Discussion group as much as possible. You can also use Bugzilla, see question 4.7 for details. As a last resort, you can send a mail directly to me (Leif). Here's the list of all currently open PerLDAP bugs and RFEs.

  5. What about Ldapp? How can I migrate to PerLDAP?

    Ldapp and Ldapc are the old Perl/LDAP modules developed at Netscape. They are no longer supported, and we strongly recommend you upgrade to use PerLDAP. If you used the OO layer of Ldapp, migrating to PerLDAP should be easy. In most cases it's just a matter of changing the "use" statements, e.g. from use Ldapp; to use Mozilla::LDAP::Conn;

  6. Does PerLDAP support SSL?

    Yes! But only if the C SDK you have installed supports SSL, PerLDAP itself does not have any SSL code or encryption code. As such, PerLDAP source can be distributed without any export restrictions.

  7. Do you have some links to relevant LDAP sites?

    Absolutely, how about:


2. Using and building PerLDAP from the source

  1. How do I get the source code?

    CVS is your friend! You can use Mozilla's CVS server to easily keep up to date with latest releases and development. The CVS module for PerLDAP is named PerLDAP. The tip of the tree is the latest stable release, and all development is being done on branches. You can also use FTP to get a packaged source distribution.

  2. What do I need to build PerLDAP?

    At a minimum you'll need

    • An ANSI compatible C compiler (e.g. gcc or Visual C++).
    • A make tool, like GNU make, or nmake.
    • Perl version 5.004 or later, including ActiveState's latest Perl distribution, but not ActivePerl v5.003 or earlier.
    • A C SDK, either a binary distribution from Netscape's DevEdge, or the Mozilla source.

  3. What's the latest PerLDAP version?

    The latest official release is v1.2.1, released 03/21/99. The tip of the CVS tree is always the latest official release, development is done on branches. We strongly encourage everyone to upgrade from v1.0 to v1.2.1 as soon as possible, it fixes a number of bugs and has many improvements.

  4. Where are the beta/development releases?

    The beta releases and development branches are only available via CVS. The current beta/development branch is devel-branch-1_3, and the branch for future v2.x is devel-branch-1_9. PerLDAP v1.2.1 has been merged onto the main trunk, and is also tagged as v1.2.1.

    I'll make snapshots of the development branches available every now and then, or upon request. These can easiest be downloaded from my private FTP site.

  5. Why doesn't PerLDAP v1.0 build with Mozilla SDK?

    This is a known problem in PerLDAP v1.0, and is caused by a library naming mismatch. You must also link with both libldap.so and liblber.so when using Mozilla SDK source. The best solution is to use PerLDAP v1.2.1, it fixes these and other problems. Alternatively you can rename the SDK libraries to match the names used in the DevEdge distributions.

    The following patch to Makefile.PL might also do it (this is not the real solution as used in v1.2.1, but does work with v1.0):

    
    Index: Makefile.PL
    ===================================================================
    RCS file: /cvsroot/mozilla/directory/perldap/Makefile.PL,v
    retrieving revision 1.13
    diff -c -r1.13 Makefile.PL
    *** Makefile.PL 1998/08/14 21:45:39     1.13
    --- Makefile.PL 1998/09/08 08:54:53
    ***************
    *** 128,134 ****
            ) : (
            'INC'           =>      "",
            )),
    !       'LIBS'          =>      ["-L$lib_ldap -l$ldap_lib"],
            'MYEXTLIB'      =>      $myextlib,
            'DEFINE'        =>      "$v3_def $ssl_def",
      );
    --- 128,134 ----
            ) : (
            'INC'           =>      "",
            )),
    !       'LIBS'          =>      ["-L$lib_ldap -lldap -llber"],
            'MYEXTLIB'      =>      $myextlib,
            'DEFINE'        =>      "$v3_def $ssl_def",
      );
      

  6. I built with Mozilla C-SDK, now why can't PerLDAP resolve ldap_init() and other symbols?

    You are using PerLDAP v1.0, and didn't apply the patch above, did you? You should have seen a warning like:

    
    .
    .
    Checking if your kit is complete...
    Looks good
    Note (probably harmless): No library found for -lldap30
    Writing Makefile for Mozilla::LDAP::API
      

    Well, unfortunately that error can not be ignored, it's vital that you link in the LDAP SDK libraries. Go back to Q-2.5, or get PerLDAP v1.2.1 or later.

  7. Do I really need the C-SDK?

    Absolutely! If you intend to build PerLDAP, you will need a Netscape C-SDK distribution, period. Mozilla distributes the source to this SDK, which will build and run on a number of platforms. Unfortunately this source does not have any encryption support, so you can use SSL.

    Netscape's DevEdge Online provides precompiled (binary) distributions of the C SDK. You can get if from the Directory Developer Central.


3. Binary distributions and released versions

  1. Where can I find a binary distribution for platform <XXX>?

    Currently only two binary distributions are prepared by us, for Solaris and Windows/NT. They are both available from Netscape DevEdge Online, Directory Developer Central. Note that this are created using the old v1.0 version of PerLDAP, new binaries are in progress.

    ActiveState has also prepared a binary distribution suitable for their ActivePerl release. It's available from their Web site.

  2. What's the latest released binary version?

    From DevEdge, it's PerLDAP v1.0, I'm not sure about ActiveState or other sites. Please let me know if you have binary distributions available for certain platforms and packages.

  3. Why is the "Perl_tmps_floor" symbol missing?

    This is most likely because your Perl interpreter is built with statically linking the Perl core library. Our binary distributions on Solaris was built with a Perl using libperl.so. If you have this problem, either reconfigure and rebuild Perl, or rebuild PerLDAP.

  4. I can't get the v1.0 binary distribution to work with Perl v<Y.Z>.

    The binary distributions will only work with the Perl version used during the build. Currently that means Perl v5.004. The next binary distributions will hopefully be complete perl distributions, which should make this much easier to maintain.

  5. Where are the C-SDK binaries?

    At Netscape's DevEdge site. See Q-2.7 above.


4. Working with the source, CVS and bug reports

  1. What the heck is CVS? How do I use it? Where can I get it?

    CVS is a source code version control system, used to manage large software projects with many developers. It's built on top of RCS, and is available for free for most Unix and Windows platforms. Source for the latest CVS version (currently v1.10.3) can be FTP'd from the Cyclic FTP repository for instance. The source includes documentation, which I've also made available on my Web site.

    I've also made a few, unsupported, binary distributions available, for:

    • Linux (install with "rpm -i cvs-1.10.5-1.i386.rpm").
    • Solaris (gunzip the file, and install with "pkgadd -d GNUcvs-1.10.5.pkg").
    • Windows/NT (use your favorite "unzip" application to extract the cvs.exe binary).

    Note that you might have to <shift>-click on the links above to get the download dialog. Alternatively, you can use HTTP to get these files. Again, these are not Mozilla "blessed" builds, I'm just providing them for your convenience.

  2. How do I check out the latest, stable released code?

    You can use anonymous CVS to the mozilla CVS server, logging in with the username anonymous, password anonymous. For instance, to login and check out the tip of the PerLDAP module, you'll do

    
    % cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot login
    (Logging in to anonymous@cvs-mirror.mozilla.org)
    CVS password:  [you type anonymous]
    %
    % cvs -z3 -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co PerLDAP
    
    cvs server: Updating mozilla/directory/perldap
    U mozilla/directory/perldap/API.pm
    U mozilla/directory/perldap/API.xs
    U mozilla/directory/perldap/ChangeLog
    .
      

    Remember that you usually only have to login the first time you use CVS, the authentication credentials are stored in your ~/.cvspass file. The "-z3" option tells CVS to use compression, make sure your version of CVS has support for this (some versions apparently chokes badly with this option).

    The following releases are available, please use the main trunk when possible (to get the latest, stable code):

    • release-1_0: First, original, PerLDAP release (quite shaky...).
    • release-1_2: Lots of fixes, but still had some problems.
    • release-1_2_1: Latest, stable, release. Fixes lots of bugs.

  3. How do I check out a beta/development branch?

    Just as above, but also specify a specific branch to check out. For instance, to update your source to the v1.3 branch, you can do something like

    
    % cd mozilla/directory/perldap
    % cvs -z3 update -r devel-branch-1_3
    cvs server: Updating .
    P API.pm
    P API.xs
    .
      

    We will continuously tag the development branch with snapshots, e.g. devel-release-1_3_1, devel-release-1_3_2 and so on. Hopefully we'll also get these snapshots packaged up automatically and added to the Mozilla FTP server. For now I'm making them available on the PerLDAP site.

  4. Is there a list of all development branches?

    Of course:

    • devel-branch-1_1: This is closed, and has been merged to the trunk.
    • devel-branch-1_3: This is the current v1.x development branch.
    • devel-branch-1_9: The development branch for PerLDAP v2.0.

    It's recommended that you use the main trunk (release-1_2) in production use, and devel-branch-1_3 for PerLDAP development.

  5. What CVS modules are available and relevant to PerLDAP?

    The PerLDAP module is named PerLDAP. You can also check out the entire "directory" source, with something like

    
    % cvs -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co mozilla/directory
      

    The above gives you everything, if you're only intersted in say the C SDK source, you can limit the checkout to the module DirectorySDKSourceC. A list of all available modules is in the modules files in the CVSROOT directory.

  6. Where do I send patches or new code I'd like to contribute?

    Post it to the News group.

  7. How do I report a bug I just found?

    Post it to the News group. If you have access to Bugzilla, file a bug against me. Here's the list of all currently open PerLDAP bugs and RFEs.

  8. Where can I read about known, open bugs?

    See previous question, Q-4.7.


5. LDAP related questions

  1. How do I "browse" an LDAP entry when I know it's DN?

    You do a base search with the DN as the baseDN, and a filter of (objectclass=*). For example:

    
    use Getopt::Std;
    use Mozilla::LDAP::Conn;
    use Mozilla::LDAP::Utils;
    #
    # Include other code to parse arguments etc here...
    #
    $DN = "uid=leif, ou=People, dc=netscape, dc=com";
    $conn = new Mozilla::LDAP::Conn(\%ld);
    die "Could't connect to LDAP server $ld{host}" unless $conn;
    
    $entry = $conn->search($DN, "base", "(objectclass=*)");
    if ($entry) {
      # We found one entry
    } else {
      # We did not find an entry, the DN is invalid.
    }
      

  2. How can I manage my Netscape DS-4 server information with PerLDAP?

    Right now there's no code ready for this, but we are working on a DS-4 management module using PerLDAP.

  3. What is the "manage DSA IT" control? Can I use it with PerLDAP?

    This control can be used to manage Smart Referrals for instance. For more information, see the DevEdge documentation. PerLDAP has support for controls, but the OO layers do not use (or support) them at this point.

  4. Does PerLDAP support all LDAP v3 features?

    Yep, the API.pm package does. The OO layers (Conn.pm, Entry.pm etc.) do not use an LDAP v3 features, yet. We'll be working on this in the next few months, hopefully adding cool features like LDAP controls, VLV indexes and so on.

  5. How do I search for something? What is an LDAP filter?

    RTFM, perhaps from one of the links above.

  6. How do I specify/limit what attributes are retrieved in a search?

    By default a PerLDAP search operation will retrieve all attributes that an entry has, assuming you have read permission to the entry (and/or the attributes). You can limit the number of attributes by specifying an array of attribute types, for instance

    
    @attr = ("cn", "uid", "mail");
    $entry = $conn->search($base, "sub", $filter, 0, @attr);
      

    The 0 parameter in the example is a flag, which if set to 1, ("True") tells the search function to only retrieve the attribute types, not the actual values. In most cases you want to set this flag to 0 ("False"). Remember that just because you explicitly asked for an attribute, doesn't necessarily mean you'll get it (either because the entry doesn't have such a user attribute value, or perhaps because you don't have access to it).

    Some attributes, typically operational attributes, are not returned by default, and you might have to explicitly ask for them. An example of such an attribute is the modifiersName attribute. If you want to get all user attributes, and an operational attribute, you can do

    
    @attr = ("*", "modifiersName");
    $entry = $conn->search($base, "sub", $filter, 0, @attr);
      

    The attribute "*" matches all attributes. If you don't want to retrive any attributes at all, specify the attribute "1.1" (there is no such OID, so no attributes can be returned). This is useful if you need the DN only, and no attribute values.

    
    @attr = ("1.1");
    $entry = $conn->search($base, "sub", $filter, 0, @attr);
      

  7. How can I call an LDAP API function, when it needs the internal C SDK structures?

    This is not generally recommended when using the OO modules (e.g. Conn.pm) . But there are two methods to retrieve the internala handles from the Mozilla::LDAP::Conn object:

    
    $cld = $conn->getLD();
    $result = $conn->getRes();
      

    The first method returns the LDAP connection handle, and the second returns the handle to the last result message. Use these with care, and remember that this might cause your code to break in future version of PerLDAP. Also, the getRes() method is only available as of PerLDAP v1.2, for PerLDAP v1.0 you could instead use an even uglier solution:

    
    $cld = $conn->{"ld"};
    $res = $conn->{"ldres"};
      

  8. How can I count the number of entries a search found?

    Using the information from the previous question, the answer is of course:

    
    $cld = $conn->getLD();
    $res = $conn->getRes();
    $count = Mozilla::LDAP::API::ldap_count_entries($cld, $res);
      

    Again, this is not really recommended, and this might change in future releases. One possibility is to add this feature as a native method, but I need to investigate this further, since v2.0 of PerLDAP might use asynchronous LDAP calls (for much better scalability).

    Another common task is to decide if a search returns exactly one entry, no more, no less. That can easily be done with the existing modules, for instance

    
    $entry = $conn->search($base, $scope, $filter);
    if ($entry && !$conn->nextEntry()) {
       # We found exactly one entry, go ahead
    }
      

  9. How do I create a new LDAP entry?

    There are several options, the easiest are then please change it to be one of

    
    $entry = $conn->newEntry();
    $entry = Mozilla::LDAP::Conn->newEntry();
      
    You can (as of PerLDAP v1.2.1) also use the new() method in the Entry package, like
    
    $entry = new Mozilla::LDAP::Entry;
      
    $conn is your ::Conn object, as usual.

    The outline to create a new object is, as of PerLDAP v1.2, something like:

    
    $conn = new Mozilla::LDAP::Conn(\%main::ld);
    $entry = Mozilla::LDAP::Conn->newEntry();
    
    $entry->setDN("uid=$UID, $PEOPLE, $BASE");
    $entry->{objectclass} = [ "top", "person", "inetOrgPerson", "mailRecipient" ];
    $entry->addValue("uid", $UID);
    $entry->addValue("cn", "Leif Hedstrom");
    $entry->addValue("cn", "The Swede");
    .
    .
    .
    $conn->add($entry);
      

  10. How do I authenticate a user against the LDAP server?

    Easy, first bind as the anonymous user, find the DN for the person you wish to authenticate, get the DN, and rebind using the DN and password. This example, which requires PerLDAP v1.2 or later, shows how to do flexible user authentication:

    
    #!/usr/bin/perl5
    
    use Mozilla::LDAP::Conn;
    
    #
    # Configuration part, change this
    #
    $BASE = "dc=netscape,dc=com";
    $USER = $ARGV[0];
    $PASS = $ARGV[1];
    
    $conn = new Mozilla::LDAP::Conn({ "host" => "localhost",
    				  "port" => "389"} );
    die "Can't get an LDAP connection" unless $conn;
    
    
    #
    # Try to find the user using the UID, CN and last MAIL attributes.
    #
    $entry = $conn->search($BASE, "SUB", "(uid=$USER)", 0, ("1.1"));
    if (!$entry || $conn->nextEntry()) {
      $entry = $conn->search($BASE, "SUB", "(cn=$USER)", 0, ("1.1"));
      if (!$entry || $conn->nextEntry()) {
        $entry = $conn->search($BASE, "SUB", "(mail=$USER)", 0, ("1.1"));
        $dn = $entry->getDN() if ($entry && ! $conn->nextEntry());
      } else {
        $dn = $entry->getDN();
      }
    } else {
      $dn = $entry->getDN();
    }
    
    #
    # Now let's verify the authentication credentials, by rebinding with the
    # users DN and password. Note that this leaves the connection bound
    # as the user, do another simpleAuth() to rebind as anonymous again.
    #
    my $authenticated = 0;
    if (($PASS ne "") && ($dn ne "") && ($conn->simpleAuth($dn, $PASS))) {
      print "WhooHoo, authentication is good!\n";
      $authenticated = 1;
    }
    
    print "Wrong username or password, dude.\n" unless $authenticated;
      


6. Platform and Perl version specific problems

  1. What Perl versions are supported?

    Any Perl version from v5.004 or later. The binaries prepared will only work with the Perl version used during the build, see README and INSTALL information for more details on the distribution.

  2. Which Perl version is recommended?

    Perl v5.005_02.

  3. Which Unix and Windows platforms are supported, and which versions?

    I know PerLDAP v1.2.1 and later should work on at least these platform and version combinations:

        Perl 5.004     Perl 5.005     ActivePerl 509  
      Solaris-2.x  YesYes-
      Linux/glibc  YesYes-
      Irix-6.x  Yes???-
      Windows/NT4 SP3  YesYes???
      Windows/NT4 SP4  YesYesYes (see Q-7.3)


    If you are using PerLDAP on another platform, please let us know.

  4. How do I get PerLDAP to build on my Windows/NT machine? Why can't NT find libldap.dll?

    I've succesfully compiled Perl and PerLDAP using nmake and Visual C++. Your mileage might vary, if you have build details we want to hear about it.

    One common problem seems to be where to put the C SDK libldap DLL. I've found that copying the DLL to the perl "bin" directory, where the perl.exe resides, works well. Another good alternative is to add the C-SDK library folder to your PATH environment variable.

    As of Perl v5.005, it seems that you should put the libldap DLL in the "site" directory, and not the the "bin" directory. For instance, if you installed ActiveState build 509 in C:\perl, put the LDAP DLL in C:\perl\site.

  5. What C SDKs are supported? What about SSL?

    All released C SDK versions are supported in PerLDAP v1.2 and later. In v1.0 we only verified SDK v1.2 and SDK v3.0. As of v1.2, the Mozilla C SDK source should also work out of the box with PerLDAP.

    PerLDAP has full support for SSL, but only if your C SDK has support for it. The Mozilla C SDK source on mozilla.org does not have SSL support, but the DevEdge binary distributions do.

  6. What is the build options for DecUnix/OSF? What is "-taso"?

    The -taso/-xtaso compile options are used for 32 bit compatibility. Specificially

    • -taso ensures that the code is 32 bit compatible, specfically, the linker forces loading of a library or module into the lower 31 bits of virtual memory. It is useful in porting from 32-bit architectures.
    • -xtaso extends the 32 bit -taso style builds to optionally use 32-bit pointers. This requires using #pragma pointer_size in the code and linking with -taso and -xtaso objects.

    What does this mean? Well, apparently there can be a mismatch in how you compiled Perl for instance, causing the dynamic loader to misbehave. If someone can give more information exactly how to compile PerLDAP for OSF, I'd be happy to put that in here (post something to the News group).

  7. What link options are used/needed for Irix?

    I don't know, I saw something about some special linker options, someone who knows Irix please let me know.

  8. Why are there missing symbols when linking PerLDAP on Windows/NT?

    With Perl v5.005, I had to remove the link option -nodefaultlib from the LINK_FLAGS definition in the Makefile (when building Perl itself). I don't know why this was added in v5.005, but at least this solved the problem for me.

    There are several alternatives to solve this problem, like

    1. Modify the Makefile for Perl as described above, and rebuild Perl.
    2. Modify the Config.pm file in the Perl5 installation.
    3. Modify the Makefile as generated for PerLDAP.
  9. How do I compile and install PerLDAP in a test environment?

    Easy, give an option like "LIB=/u/leif/lib" to the Makefile.PL script during the installation and configuration, like

    
    % perl5 Makefile.PL LIB=/u/leif/lib
      
    Then in your perl script, add a line like
    
    use lib '/u/leif/lib';
      


7. Known bugs and problems

  1. I can't get PerLDAP to work with ActivePerl.

    There's been reports on this, and a patch was made by the nice people at ActiveState. That patch has been merged into PerLDAP v1.2 and later. I've verified that PerLDAP v1.2 and ActivePerl build 509 compiles, unfortunately my regression tests sometimes fails with a Runtime exception error (any one care to debug this in ActivePerl?).

  2. Is it just me, or is PerLDAP very memory intensive?

    No, and yes. We are working on it, for now expect it to use a lot of memory, I'll update this FAQ question if/when I know more. I have a few ideas I'm working on.

    Adding this code to Entry.pm might help you, I'm working with this for the v1.2.1 release:

    
    #############################################################################
    # Destructor, free a bunch of memory.
    #
    sub DESTROY
    {
      my ($self) = shift;
    
      undef %{$self};
    }
      

  3. I'm still having problems with ActivePerl.

    I know, my regression test also fails with ActivePerl (build 509) some times, with an "Error: Runtime exception". This doesn't happen on all tests, or not even on the same test twice. I can not explain it at this time, other PerLDAP scripts seems to work with ActivePerl, but not the t/conn.pl regression test script.

    My regression test does a number of different LDAP operations in the same script, and using the same LDAP connection. It does also delete and create new Conn objects frequently. If someone can debug this problem, and let me know if there's anything I can do to fix it, please let me know.

  4. I upgraded to PerLDAP v1.2, and my scripts can no longer add new LDAP entries, why?

    Yeah, I know, I suck... This has been fixed in PerLDAP v1.2.1.


8. Missing features and modules

  1. What about LDAP controls?

    The API.pm has full support for controls, but apparently a bug in the v1.0 PerLDAP source prevents using LDAP v3 extensions. This is fixed in PerLDAP v1.2 and later. There's no OO layers for controls yet, but it's on our ToDo list. More information about using LDAP v3 controls are available on the DevEdge documentation site.

  2. How can I use and support the LDAP v3 password management control?

    Yes, if you write code using the API directly. An OO module will be added in v1.5.

  3. Does PerLDAP support VLV indexes?

    Yes, if you use API directly. We will have a VLV OO module for v1.5 or v2.0.

  4. The LDIF module seems horky, what gives?

    I suck. Version v1.2 has some minor improvements, and in v1.3 we have a completely new LDIF.pm module, written by Netscape LDAP guru John Kristian <kristian@netscape.com>

  5. Are there any PerLDAP code to manage LDAP schemas?

    Not any specific code, yet. Hopefully a new schema package, and a Netscape Console module will be developed by Netscape's Allen Tom <atom@netscape.com>

  6. What are the plans for the next PerLDAP version?

    Tons of new code. I'm just about ready with v1.2.1, and I'm eager start working on some new cool features for v1.4/v2.0. Some ideas include

    • Rewrite to use/support asynchronous LDAP, which should improvem performance and reduce memory usage when doing very large searches.
    • Finally fix all memory related problems.
    • Support for SASL, with client authentication at least.
    • A group management module, similar to the one I wrote for Ldapp.
    • A framework for LDAP v3 controls, with some sample controls (e.g. password control, Manage DsaIT control etc).
    • VLV indexes support (requires LDAP v3 controls I think).
    • An Oracle database synchronization module.
    • A module, or extension to Entry.pm, to synchronize, compare, "diff", join etc. two Entry objects.
    • Schema discovery and management.
    • A module to manage Netscape Directory Server configurations, schema discovery etc. This one might be capable of managing all Netscape Console enabled servers, assuming they store the configurations in LDAP. An example script using this module would be to "synchronize" two LDAP server, making sure all (or selected) configuration parameters are identical.
    • A configuration module, to make it easy to configure appropriate default values (like base-DN etc). This could be used by all tools, including the existing modules/methods (like that argument parser).
    • Extend the argument parser to support all standard LDAP arguments as used by Netscape's command line tools (as of DS-v4.x).
    • Support/use new features of LDAP v3 which are not covered by other modules?

Problems with this page?
Last modified: Mon Mar 22 23:10:21 1999

Copyright © 1998-1999 The Mozilla Organization.