ABLEConf 2009


*Free. *Saturday, October 24, 2009... 10am to 4pm at the University of Advancing Technology in Phoenix (Baseline Rd. just west of I-10).

A full day of presentations and participation on free software.

More info:

Update: A good time and a good place to meet like-minded folks and get up to speed on new technology, and even a few "Aha!" moments on how to do things better. See you next year!

Notes on Text File Handling


Share Thunderbird Address book via LDAP


If you like this, please consider donating to fund further development.

After years of frustration waiting for the Mozilla Thunderbird folks to add the ability to edit LDAP address-books, and years of frustration with the pigheadedness and brain-damagedness of LDAP server software, I decided to write my own little pseudo-LDAP server.

This is a proof of concept only and not meant for production use yet.

Here it is, in Perl: generic-ldap-0.1 It merely reads in

and shares that out via the LDAP protocol, using the Net::LDAP::Server module. Writing this meant seeing what the various email clients (Thunderbird, Evolution, KMail) actually wanted to see.

The nastiest, most brain-damaged part of LDAP is the non-standard field (attribute) names. None of these programs agree on what to call "home street address" versus "work street address," for example. What a nightmare. My little server tries to remedy this by copying what it can suss out, into every possible field that your email client might be looking for.

What needs to be done yet?

This is written as an extensible system with Plugins. At the moment it fills my internal needs -- specifically, sharing a single Thunderbird address-book inside an office.

Please contact me if you would like help adding features or additional development.

William Lindley,, 480.947.6100

Mailman membership reminder


Here's a little script you can add to your crontab, to periodically email the administrators of each mailman mailing list both the list of current members and the mailing-list's full configuration. This gives you both an audit trail of membership and the ability to restore mailing lists from the backup files in case your webhost goes awry.

mailman-reminder (Perl script)

Edit root's crontab with the command

# **crontab -e**

and add something like this:

0 3 1 * * perl /root/

Which will run the script at 03:00 on the first day of each month.

Bug, resolution, and patch to Net::LDAP::Server


Dear Mr. Ranellucci,

I am writing an LDAP server using this module and have found that Evolution -- at least version 2.26.1 on Ubuntu -- transmits an abandonRequest after each searchRequest. Because there is no defined return value for an abandonRequest, the Perl module closes the socket and Evolution fails thereafter to communicate with the server.

The following patch resolves the bug, by properly checking whether the request -- NOT the response type -- is defined, and only hanging up in the event of an undefined request. The patch also only sends a response for defined response types -- of which abandonRequest has none.

With this patch, a server created with the Net::LDAP::Server module functions properly with Evolution.

I hope you will agree to incorporate this into the module and update CPAN accordingly.


\/ William Lindley +1 480.947.6100

Patch follows. On my system, the appropriate file is:


---begin--- ` 82,83c82,85 < my $respType = $respTypes{$reqType} < or return 1; # if no response type is present hangup the connection --- > if (!defined $reqType) { > return 1; # unknown request type - hangup connection > } > my $respType = $respTypes{$reqType}; 141,142c143,146 <

and now send the result to the client < print $socket

&encoderesult($mid, $respType, $result); --- > # and now send the result, if any, to the client > if (length($respType)) { > print $socket &encoderesult($mid, $respType, $result); > }`