jaromail

a commandline tool to easily and privately handle your e-mail
git clone git://parazyd.org/jaromail.git
Log | Files | Refs | Submodules | README

commit 2d3ceb01fc91445639962960a688ce3e08353986
parent cb2002f7d05b97aea2cd0da71b3fb1e0a64c8bc7
Author: Jaromil <jaromil@dyne.org>
Date:   Mon, 19 Mar 2012 22:44:45 +0100

added little brother database

Diffstat:
Ashare/lbdb/COPYING | 340+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/README | 212+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb-fetchaddr.man.in | 122+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb-fetchaddr.sh.in | 127+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb-munge.sh.in | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb.rc.in | 190+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb.spec.in | 79+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdb_lib.sh.in | 80+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdbq.man.in | 378+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/lbdbq.sh.in | 116+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_abook.sh.in | 39+++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_addr_email.sh.in | 39+++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_bbdb.sh.in | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_evolution.sh.in | 83+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_fido.sh.in | 30++++++++++++++++++++++++++++++
Ashare/lbdb/m_finger.sh.in | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_getent.sh.in | 37+++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_gnomecard.sh.in | 71+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_gpg.sh.in | 42++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_inmail.sh.in | 34++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_ldap.sh.in | 39+++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_muttalias.sh.in | 46++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_nispasswd.sh.in | 38++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_osx_addressbook.sh.in | 28++++++++++++++++++++++++++++
Ashare/lbdb/m_palm.sh.in | 34++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_passwd.sh.in | 38++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_pgp2.sh.in | 35+++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_pgp5.sh.in | 36++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_pine.sh.in | 132+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_vcf.sh.in | 44++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/m_wanderlust.sh.in | 33+++++++++++++++++++++++++++++++++
Ashare/lbdb/m_yppasswd.sh.in | 37+++++++++++++++++++++++++++++++++++++
Ashare/lbdb/munge-keeporder.awk.in | 41+++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/munge.awk.in | 36++++++++++++++++++++++++++++++++++++
Ashare/lbdb/mutt_ldap_query.pl.in | 559+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/nodelist2lbdb.man.in | 44++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/nodelist2lbdb.pl.in | 124+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/palm_lsaddr.pl.in | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ashare/lbdb/tac.awk.in | 37+++++++++++++++++++++++++++++++++++++
39 files changed, 3645 insertions(+), 0 deletions(-)

diff --git a/share/lbdb/COPYING b/share/lbdb/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/share/lbdb/README b/share/lbdb/README @@ -0,0 +1,212 @@ +$Id: README,v 1.37 2007-05-27 08:42:22 roland Exp $ + + + The Little Brother's Database + + Roland Rosenfeld <roland@spinnaker.de> (current maintainer) + Thomas Roessler <roessler@guug.de> (initial author) + +This package was inspired by the Big Brother Database package +available for various Emacs mailers, and by Brandon Long's "external +query" patch for the mutt mail user agent (Note that this patch has +been incorporated into the main-line mutt versions as of mutt 0.93.) + +The package doesn't use any formal database libraries or languages, +although it should be quite easy to extend it to use, e.g., an +installed PostgreSQL server as it's backend. + +For querying the Little Brother, just type "lbdbq <something>". lbdbq +will now attempt to invoke various modules to gather information about +persons matching "<something>". E.g., it may look at a list of +addresses from which you have received mail, it may look at YP maps, +or it may try to finger <something>@<various hosts>. + +The behavior is configurable: Upon startup, lbdbq will source the +shell scripts + + /usr/local/etc/lbdb.rc (or where your @sysconfdir@ points to) + $HOME/.lbdbrc + $HOME/.lbdb/lbdbrc + $HOME/.lbdb/rc + +if they exist. + +They can be used to set the following global variables: + +- MODULES_PATH: Where lbdbq should look for modules + +- METHODS: What modules to use. + +- SORT_OUTPUT: Set this to "false" or "no" and lbdbq won't sort the + addresses but returns them in reverse order (which means that the + most recent address in m_inmail database is first). If you set this + to "name", lbdbq sorts the output by real name. If you set this to + "comment", it sort the output by the comment (for example the date + in m_inmail). If you set this to "address", lbdbq sorts the output + by addresses (that's the default). + + +Note that there _are_ defaults, so you should most probably modify +these variables using constructs like this: + + MODULES_PATH="MODULES_PATH $HOME/lbdb_modules" + +Additionally, modules may have configuration variables of their own. + +Currently the following modules are supplied with lbdb: + +m_finger + This module will use finger to find out something more about a + person. The list of hosts do be asked is configurable; use the + M_FINGER_HOSTS variable. Note that "localhost" will mean an + invocation of your local finger(1) binary, and should thus work + even if you don't provide the finger service to the network. + m_finger tries to find out the machines mail domain name in + /etc/mailname, by parsing a sendmail.cf file (if it finds one) + and by reading /etc/hostname and /etc/HOSTNAME. + +m_inmail + This module will look up user name fragments in a list of mail + addresses created by lbdb-fetchaddr(1). + +m_passwd + This module searches for matching entries in your local + /etc/passwd file. It evaluates the local machine mail domain in + the same way m_finger does. If you set PASSWD_IGNORESYS=true, + this module ignores all system accounts and only finds UIDs + between 1000 and 29999 (all other UIDs are reserved on a Debian + system). + +m_yppasswd + This module searches for matching entries in your NIS password + file using the command "ypcat passwd". + +m_nispasswd + This module searches for matching entries in the NIS+ password + database using the command ``niscat passwd.org_dir''. + +m_getent + This module searches for matching entries in whatever password + database is configured using the command ``getent passwd''. + +m_pgp2, m_pgp5, m_gpg + These modules scan your PGP 2.*, PGP 5.* or GnuPG public key + ring for data. They use the programs pgp(1), pgpk(1), or gpg(1) + to get the data. + +m_fido + This module searches your Fido nodelist, stored in + $HOME/.lbdb/nodelist created by nodelist2lbdb(1). + +m_abook + This module uses the program abook + (http://www.linuxstart.com/~jheinonen/abook/), a text based + address book application to search for addresses. You can + define multiple abook address books by setting the variable + ABOOK_FILES to a space separated list. + +m_addr_email + This module uses addr-email from the addressbook + (http://red.roses.de/~clemens/addressbook/) Tk program to + search for addresses. + +m_muttalias + This module searches the variable MUTTALIAS_FILES (a space + separated list) of files in MUTT_DIRECTORY that contain mutt + aliases. File names without leading slash will have + MUTT_DIRECTORY (defaults to $HOME/.mutt or $HOME, if + $HOME/.mutt does not exist) prepended before the file name. + Absolute file names (beginning with /) will be taken direct. + +m_pine + This module searches pine(1) addressbook files for + aliases. To realize this it first inspects the variable PINERC. + If it isn't set, the default `/etc/pine.conf + /etc/pine.conf.fixed .pinerc' is used. To suppress inspecting + the PINERC variable, set it to "no". It than takes all + address-book and global-address-book entries from these pinerc + files and adds the contents of the variable PINE_ADDRESSBOOKS + to the list, which defaults to `/etc/addressbook .addressbook'. + Then these addressbooks are searched for aliases. All filenames + without leading slash are searched in $HOME. + +m_palm + This module searches the Palm address database using the + Palm::PDB and Palm::Address Perl modules from CPAN. It + searches in the variable PALM_ADDRESS_DATABASE or if this isn't + set in $HOME/.jpilot/AddressDB.pdb. + +m_gnomecard + This module searches for addresses in your GnomeCard database + files. The variable GNOMECARD_FILES is a whitespace separated + list of GnomeCard data files. If this variable isn't defined, + the module searches in $HOME/.gnome/GnomeCard for the GnomeCard + database or at least falls back to $HOME/.gnome/GnomeCard.gcrd. + If a filename does not start with a slash, it is prefixed with + $HOME/. + +m_bbdb + This module searches for addresses in your (X)Emacs BBDB (big + brother database). It doesn't access ~/.bbdb directly (yet) + but calls (x)emacs with a special mode to get the information + (so don't expect too much performance in this module). You can + configure the EMACS variable to tell this module which emacsen + to use. Otherwise it will fall back to emacs or xemacs. + +m_ldap + This module queries an LDAP server using the Net::LDAP Perl + modules from CPAN. It can be configured using an external + resource file (for more details please refer to the + mutt_ldap_query(1) manual page). + +m_wanderlust + This module searches for addresses stored in your + $WANDERLUST_ADDRESSES (or by default in $HOME/.addresses) file, + an addressbook of WanderLust. + +m_osx_addressbook + This module queries the OS X AddressBook. It is only available + on OS X systems. + +m_evolution + This module queries the Ximian Evolution address book using the + evolution-addressbook-export application. + +m_vcf + This module uses libvformat to search for addresses from the + space-separated set of vCard files defined in $VCF_FILES. + + +Feel free to create your own modules to query other kinds of +databases. m_finger should be a good example of how to do it. + +If you create your own modules or have other changes and feel that +they could be helpful for others, don't hesitate to submit them to me +for inclusion in later releases. + +Finally, to use lbdbq from mutt, add the following line to your +~/.muttrc: + + set query_command="lbdbq %s" + + +CREDITS +------- + +Most of the really interesting code of this program (namely, the RFC +822 address parser used by lbdb-fetchaddr) was stolen from Michael +Elkins' mutt mail user agent. Additional credits go to Brandon Long +for putting the query functionality into mutt. + +Many thanks to the authors of the several modules and extensions: +- Ross Campbell <rcampbel@us.oracle.com> (m_abook, m_yppasswd) +- Marc de Courville <marc@courville.org> (m_ldap, mutt_ldap_query) +- Brendan Cully <brendan@kublai.com> (m_osx_addressbook, m_vcf) +- Gabor Fleischer <flocsy@mtesz.hu> (m_pine) +- Rick Frankel <rick@rickster.com> (m_gnomecard) +- Guido Guenther <agx@sigxcpu.org> (m_evolution) +- Utz-Uwe Haus <haus@uuhaus.de> (m_bbdb, m_nispasswd) +- Torsten Jerzembeck <toje@nightingale.ms.sub.org> (m_addr_email) +- Gergely Nagy <algernon@debian.org> (m_wanderlust) +- Dave Pearson <davep@davep.org> (m_palm, lbdb.el) +- Brian Salter-Duke <b_duke@bigpond.net.au> (m_muttalias) diff --git a/share/lbdb/lbdb-fetchaddr.man.in b/share/lbdb/lbdb-fetchaddr.man.in @@ -0,0 +1,122 @@ +.\" -*- nroff -*- +.\" Copyright (c) 1998-2005 Roland Rosenfeld <roland@spinnaker.de> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software Foundation, +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +.\" +.TH LBDB-FETCHADDR 1 "October 2005" "Unix" "User Manuals" +.SH NAME +lbdb-fetchaddr \- grab addresses from mails add append them to lbdb database +.SH SYNOPSIS +.B lbdb-fetchaddr +.RB [ -d +.IR dateformat ] +.RB [ -x +.IR headerfieldlist ] +.RB [ -c +.IR charset ] +.RB [ -a ] +.br +.B lbdb-fetchaddr +.RB [ -v | -h ] +.SH DESCRIPTION +.B lbdb-fetchaddr +is a shell script which reads a mail on stdin. It extracts the +contents of some header fields (default: +.RB ` From: ', +.RB ` To: ', +.RB ` Cc: ', +.RB ` Resent-From: ', +and +.RB ` Resent-To: ') +from the mail header (only addresses with a real name) and appends +them to +.IR $HOME/.lbdb/m_inmail.list . +For performance issues +.B lbdb-fetchaddr +appends new addresses to this file without removing duplicates. To get +rid of duplicates, the program +.B lbdb-munge +exists, which is run by +.B m_inmail +if needed and removes duplicates. +.PP +To use this program, put the following lines into your +.I $HOME/.procmailrc: +.nf + :0hc + | lbdb-fetchaddr +.fi +.PP +.B lbdb-fetchaddr +writes the actual date to the third column of the database by using +.BR strftime (3). +It uses "%Y-%m-%d %H:%M" as the default date format (e.g. "1999-04-29 +14:33"). You can change this by using the +.B -d +option to select a different date format string as parameter of +lbdb-fetchaddr command like +.nf + :0hc + | lbdb-fetchaddr \-d "%y-%m-%d" +.fi +which results in e.g. "99-04-29". +.SH OPTIONS +.TP +.B -v +Print version number of lbdb-fetchaddr. +.TP +.B -h +Print short help of lbdb-fetchaddr. +.TP +.BI -d " dateformat" +Use the given date format using +.BR strftime (3) +syntax. +.TP +.BI -x " headerfields" +A colon separated list of header fields, which should be searched for +mail addresses. If this option isn't given, we fall back to +.RB ` from:to:cc:resent-from:resent-to '. +.TP +.BI -c " charset" +The charset which will be used to write the database. This should be +the charset which the application expects (normally the one from your +current locale). If this option isn't given, we fall back to +.RB ` iso-8859-15 '. +.TP +.B -a +Also grab addresses without a real name. Use the local part of the +mail address as real name. +.SH FILES +.I $HOME/.lbdb/m_inmail.list +.br +.I @libdir@/fetchaddr +.br +.I @libdir@/m_inmail +.SH "SEE ALSO" +.BR lbdbq (1), +.BR @dotlock@ (1), +.BR procmail (1), +.BR procmailrc (5), +.BR strftime (3). +.SH CREDITS +Most of the really interesting code of this program (namely, the RFC +822 address parser used by lbdb-fetchaddr) was stolen from Michael +Elkins' mutt mail user agent. Additional credits go to Brandon Long +for putting the query functionality into mutt. +.SH AUTHOR +The lbdb package was written by Thomas Roessler <roessler@guug.de> and +is now maintained and extended by Roland Rosenfeld +<roland@spinnaker.de>. diff --git a/share/lbdb/lbdb-fetchaddr.sh.in b/share/lbdb/lbdb-fetchaddr.sh.in @@ -0,0 +1,127 @@ +#! @SH@ +# +# -*-sh-*- +# Copyright (C) 1998-2000 Thomas Roessler <roessler@guug.de> +# 1999-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: lbdb-fetchaddr.sh.in,v 1.20 2007-10-28 16:33:36 roland Exp $ + +LBDB_VERSION=@LBDB_VERSION@ + +umask 077 + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +dotlock=@DOTLOCK@ +fetchaddr=@libdir@/fetchaddr +db=$HOME/.lbdb/m_inmail.list + +datefmt='%Y-%m-%d %H:%M' +additional_param="" + +usage() { + echo "Usage: $0 [OPTIONS]" + echo " dig addresses from stdin with formatted timestamp" + echo "Options:" + echo " -v print version of lbdbq" + echo " -h this short help" + echo " -d 'dateformat' select date format using strftime(3)" + echo " -x 'from:to:cc' colon separated list of header fields" + echo " -c 'charset' charset for the database storage" + echo " -a also grep addresses without realname" +} + +while [ $# -gt 0 ] +do + case "$1" in + -v) + echo "lbdb-fetchaddr version $LBDB_VERSION" + exit 0 + ;; + -h) + usage + exit 0 + ;; + -d) + if [ $# -gt 1 ] + then + shift + datefmt="$1" + fi + ;; + -x) + if [ $# -gt 1 ] + then + shift + hdrlist="-x $1" + fi + ;; + -c) + if [ $# -gt 1 ] + then + shift + charset="-c $1" + fi + ;; + -a) + additional_param="$additional_param $1" + ;; + *) + if [ $# -eq 1 ] + then + # backward compatibility: + # only one parameter means, that this is the selected datefmt + datefmt="$1" + else + echo "Wrong number of parameters!" + usage + exit 1 + fi + ;; + esac + shift +done + +if [ ! -f $db ]; then + dbdir=`dirname $db` + if [ ! -d $dbdir ]; then + mkdir -p $dbdir + if [ ! -d $dbdir ]; then + echo "Can't create $dbdir" >&2 + exit 1 + fi + fi + touch $db + if [ ! -f $db ]; then + echo "Can't create $db" >&2 + exit 1 + fi +fi + +if $dotlock -r 10 -f $db +then + : # okay, do nothing +else + echo "Can't lock $db [dotlock returned $rv]." >&2 + exit 1 +fi + +if $fetchaddr $additional_param -d "$datefmt" $hdrlist $charset >> $db ; then + touch $db.dirty +fi + +$dotlock -u $db diff --git a/share/lbdb/lbdb-munge.sh.in b/share/lbdb/lbdb-munge.sh.in @@ -0,0 +1,63 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 1999-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: lbdb-munge.sh.in,v 1.8 2005-10-29 14:48:09 roland Exp $ + +LBDB_VERSION=@LBDB_VERSION@ + +umask 077 + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +dotlock=@DOTLOCK@ +fetchaddr=@libdir@/fetchaddr +db=$HOME/.lbdb/m_inmail.list + +if [ "$SORT_OUTPUT" = "false" -o "$SORT_OUTPUT" = "no" ] +then + munge=@libdir@/munge-keeporder +else + munge=@libdir@/munge +fi + +if [ ! -f $db.dirty ]; then + # Nothing to do + exit 0 +fi + +if $dotlock -r 10 -f $db +then + : # okay, do nothing +else + echo "Can't lock $db [dotlock returned $rv]." >&2 + exit 1 +fi + +if $munge < $db > $db.$$.tmp 2>/dev/null +then + # only move, if munge successful: + mv -f $db.$$.tmp $db + rm -f $db.dirty +else + rm -f $db.$$.tmp + # maybe write a debug log here... +fi + +$dotlock -u $db diff --git a/share/lbdb/lbdb.rc.in b/share/lbdb/lbdb.rc.in @@ -0,0 +1,190 @@ +# +# This is the main configuration file of the little brothers database lbdb +# +# Everything you configure here can be overridden by the users config +# file which can be found at +# ~/.lbdbrc +# ~/.lbdb/lbdbrc +# ~/.lbdb/rc +# (evaluated with ascending priority!) +# +# (c) 1999-2006 Roland Rosenfeld <roland@spinnaker.de> +# +# $Id: lbdb.rc.in,v 1.18 2006-10-14 12:10:42 roland Exp $ +# + +# +# Select which methods you want to use in which order (ascending priority): +# (a space separated list) +# +# - m_inmail search the database created by lbdb-fetchaddr(1) +# - m_finger finger some hosts defined in variable M_FINGER_HOSTS +# - m_passwd search the local /etc/passwd file. +# - m_yppasswd search the NIS password database. +# - m_nispasswd search the NIS+ password database. +# - m_getent search the password database (whatever is configured). +# - m_pgp2 search your PGP 2.* keyring +# - m_pgp5 search your PGP 5.* keyring +# - m_gpg search your GnuPG keyring +# - m_fido search the Fido nodelist converted by nodelist2lbdb(1) +# - m_abook query abook(1), the text based address book application. +# - m_addr_email query addr-email(1) from addressbook Tk-program. +# - m_muttalias search $MUTTALIAS_FILES for aliases. +# - m_pine search pine(1) addressbook files for aliases. +# - m_palm search your Palm addressbook file. +# - m_gnomecard search your GnomeCard address database files. +# - m_bbdb search your BBDB (big brother database). +# - m_ldap query an LDAP server +# - m_wanderlust search your wanderlust ~/.addresses file. +# - m_osx_addressbook search the OS X addressbook (only available on OS X). +# - m_evolution search in the Ximan Evolution addressbook. +# - m_vcf search a vcard (according to RFC2426) file. + +METHODS="m_inmail m_passwd m_finger" + + +# +# If you want m_finger to ask other host then localhost, create a list here: +# (a space separated list): +# +#M_FINGER_HOSTS="master.debian.org va.debian.org localhost" + +# +# If it isn't possible to find out the correct mail domain name of +# your system in /etc/mailname, by reading sendmail.cf, /etc/hostname +# or /etc/HOSTNAME, you can specify it in the variable +# MAIL_DOMAIN_NAME. This overrides all other mechanisms. +# +#MAIL_DOMAIN_NAME=does-not-exist.org + +# - m_muttalias query set of mutt alias files: +# +# Set MUTTALIAS_FILES below to list of files in MUTT_DIRECTORY that +# contain mutt aliases. File names without leading slash will have +# $MUTT_DIRECTORY (defaults to $HOME/.mutt or $HOME, if ~/.mutt does +# not exist) prepended before the file name. Absolute file names +# (beginning with /) will be taken direct. +# +#MUTT_DIRECTORY="$HOME/.mutt" +#MUTTALIAS_FILES=".muttrc .mail_aliases muttrc aliases" + + +# - m_pine search pine addressbook files for aliases: +# +# This module first inspects the variable PINERC. If it isn't set, the +# default `/etc/pine.conf /etc/pine.conf.fixed .pinerc' is used. To +# suppress inspecting the PINERC variable, set it to "no". It than +# takes all address-book and global-address-book entries from these +# pinerc files and adds the contents of the variable PINE_ADDRESSBOOKS +# to the list, which defaults to `/etc/addressbook .addressbook'. Then +# these addressbooks are searched for aliases. All filenames without +# leading slash are searched in $HOME. +# +#PINERC="/etc/pine.conf /etc/pine.conf.fixed .pinerc" +#PINE_ADDRESSBOOKS="/etc/addressbook .addressbook" + + +# - m_wanderlust search your WanderLust addresses files: +# +# Set WANDERLUST_ADDRESSES below to point to your WanderLust address +# book. If you don't set this variable, the default +# ($HOME/.addresses) is used. +# +#WANDERLUST_ADDRESSES="$HOME/.addresses" + + +# - m_palm search your Palm addressbook file: +# +# This module searches the Palm address database using the Palm::PDB +# and Palm::Address Perl modules from CPAN. It searches in the +# variable PALM_ADDRESS_DATABASE or if this isn't set in +# $HOME/.jpilot/AddressDB.pdb. +# +#PALM_ADDRESS_DATABASE="$HOME/.jpilot/AddressDB.pdb" + + +# - m_gnomecard search your GnomeCard address database files. +# +# This module searches for addresses in your GnomeCard database files. +# The variable GNOMECARD_FILES is a whitespace separated list of +# GnomeCard data files. If this variable isn't defined, the module +# searches in $HOME/.gnome/GnomeCard for the GnomeCard database or at +# least falls back to $HOME/.gnome/GnomeCard.gcrd. If a filename does +# not start with a slash, it is prefixed with $HOME/. +# +#GNOMECARD_FILES="$HOME/.gnome/GnomeCard.gcrd" + + +# - m_bbdb search your BBDB (big brother database). +# +# This module searches for addresses in your (X)Emacs BBDB (big +# brother database). It doesn't access ~/.bbdb directly (yet) but +# calls emacs(1) or xemacs(1) with a special mode to get the +# information (so don't expect too much performance in this module). +# You can configure the EMACS variable to tell this module which +# emacsen to use. Otherwise it will fall back to emacs or xemacs. +# +#EMACS="emacs" + + +# - m_ldap query an LDAP server. +# +# This module queries an LDAP server using the Net::LDAP Perl modules +# from CPAN. It can be configured using an external resource file. You +# can explicity define a LDAP query in this file or you can use one or +# more of the predefined queries from the %ldap_server_db in this +# file. For this you have to define the selected enties as a space +# separated list in the the variable LDAP_NICKS. +# +#LDAP_NICKS="debian bigfoot" + + +# - m_abook query the abook(1) programm +# +# if you have more than one abook addressbook, use the ABOOK_FILES +# variable. It contains a space separated list of all your files. +# Default is $HOME/.abook/addressbook $HOME/.abook.addressbook +# ABOOK_FILES="$HOME/.abook/friends $HOME/.abook/work" + + +# - m_passwd search in /etc/passwd +# +# On a Debian system only the UIDs 1000-29999 are used for normal +# users. Setting PASSWD_IGNORESYS to "true" implies that lbdbq +# ignores and UID, which isn't in that range: +#PASSWD_IGNORESYS=true + + +# - m_vcf search in vcard files +# +# You have to define the vcard files space separated in $VCF_FILES to +# make this module work: +#VCF_FILES=$HOME/my.vcf + + +# +# If you want to use private modules set the MODULES_PATH to find them: +# (a space separated list): +# +#MODULES_PATH="/usr/lib/lbdb $HOME/.lbdb/modules" + + +# +# Do you want the output to be sorted? +# If you set this to "false" or "no", lbdbq won't sort the addresses +# but returns them in reverse order (which means that the most recent +# address in m_inmail database is first). +# If you set this to "name", lbdbq sorts the output by real name. +# If you set this to "comment", lbdbq sorts the output by comment (column 3). +# If you set this to "reverse_comment", lbdbq sorts the output by comment +# but with reverse order (column 3). +# If you set this to "address", lbdbq sorts the output by addresses +# (that's the default). +# +#SORT_OUTPUT=address + +# +# Do you want to see duplicate mail addresses (with multiple real +# names or different comment fields)? Default is "no". +# +#KEEP_DUPES=no diff --git a/share/lbdb/lbdb.spec.in b/share/lbdb/lbdb.spec.in @@ -0,0 +1,79 @@ +%define ver @LBDB_VERSION@ +%define rel 2 +%define prefix /usr + +Summary: The Little Brother's Database +Name: lbdb +Version: %ver +Release: %rel +Copyright: GNU General Public Licence +URL: http://www.spinnaker.de/lbdb/ +Packager: Horms <horms@vergenet.net> +Vendor: Horms +Group: Applications/Databases +Source: http://www.spinnaker.de/debian/lbdb_%{ver}.tar.gz +NoSource: 0 +BuildRoot: /var/tmp/lbdb-%{PACKAGE_VERSION}-root +Docdir: %{prefix}/doc + +%description +This package was inspired by the Big Brother Database package available for +various Emacs mailers, and by Brandon Long's "external query" patch for the +Mutt mail user agent. (Note that this patch has been incorporated into the +main-line mutt versions as of mutt 0.93.) + +The package doesn't use any formal database libraries or languages, +although it should be quite easy to extend it to use, e.g., an installed +PostgreSQL server as it's back end. + +%prep +%setup -q + +%build +%configure 2>&1 | tee -a Configurings-`date +%Y.%m.%d` + +#Funky NPROC code to speed things up courtesy of Red Hat's kernel rpm +if [ -x /usr/bin/getconf ] ; then + NRPROC=$(/usr/bin/getconf _NPROCESSORS_ONLN) + if [ $NRPROC -eq 0 ] ; then + NRPROC=1 + fi +else + NRPROC=1 +fi +NRPROC=`expr $NRPROC + $NRPROC` + +make -j $NRPROC 2>&1 | tee -a Makings-`date +%Y.%m.%d` + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p ${RPM_BUILD_ROOT}/%{prefix}/etc + +make install_prefix=${RPM_BUILD_ROOT} install 2>&1 \ + | tee -a Makings-Install-`date +%Y.%m.%d` + +%clean +rm -rf ${RPM_BUILD_DIR}/lbdb-%{ver} +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%doc README COPYING +# Keep copies of the configure, build, install reports in the +# documentation of the package. +%doc Makings-Install-`date +%Y.%m.%d` +%doc Makings-`date +%Y.%m.%d` +%doc Configurings-`date +%Y.%m.%d` +%{prefix} + +%changelog +* Sat Dec 30 2000 Rob Payne <rnspayne@adelphia.net> +- Changed to fit version 0.22 +- Change installation process to include RPM_BUILD_ROOT +- Removed auto-generated files list that did not take into account RPM + 4's automatic compression of the man pages *after* the + auto-generation was running. +- Removed the empty post, postun, preun scripts. + +* Mon Apr 10 2000 Horms <horms@vergenet.net> +- created for version 0.18.5 diff --git a/share/lbdb/lbdb_lib.sh.in b/share/lbdb/lbdb_lib.sh.in @@ -0,0 +1,80 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (C) 1998 Thomas Roessler <roessler@guug.de> +# Copyright (C) 1999-2006 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: lbdb_lib.sh.in,v 1.7 2006-08-13 08:53:21 roland Exp $ + + +# +# library routines +# + +lbdb_hn_sendmail() +{ + sendmail_cf="NONE" + for p in /etc /etc/mail /etc/sendmail ; do + if test -r $p/sendmail.cf ; then + sendmail_cf=$p/sendmail.cf + break; + fi + done + + if test "x$sendmail_cf" != "xNONE" ; then + hn="`sed -n -e 's/^DM\(.*\)$/\1/p' $sendmail_cf`" + if test "x$hn" = x ; then + hn="`sed -n -e 's/^Dj\(.*\)$/\1/p' $sendmail_cf`" + fi + fi + if test "x$hn" = x ; then + echo "NONE" + else + echo "$hn" + fi +} + + +lbdb_hostname() +{ + if test "x$MAIL_DOMAIN_NAME" != "x" ; then + hn=$MAIL_DOMAIN_NAME + elif test -f /etc/mailname; then + hn=`cat /etc/mailname` + else + hn="" + if test -r /etc/resolv.conf ; then + hn="`sed -n -e 's/^[ ]*domain[ ]\{1,\}\([^ ]*\)/\1/p' /etc/resolv.conf`" + if test "x$hn" = "x" ; then + hn="`sed -n -e 's/^[ ]*search[ ]\{1,\}\([^ ]*\)/\1/p' /etc/resolv.conf`" + fi + fi + if test "x$hn" = "x" ; then + hn=`lbdb_hn_sendmail` + if test "x$hn" = "xNONE" ; then + for i in /etc/HOSTNAME /etc/hostname ; do + if test -f $i ; then + hn="`cat $i`" + break; + fi + done + fi + fi + fi + echo "$hn" +} diff --git a/share/lbdb/lbdbq.man.in b/share/lbdb/lbdbq.man.in @@ -0,0 +1,378 @@ +.\" -*- nroff -*- +.\" Copyright (c) 1998-2007 Roland Rosenfeld <roland@spinnaker.de> +.\" +.\" This program is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software Foundation, +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +.\" +.\" $Id: lbdbq.man.in,v 1.49 2010-05-18 17:51:02 roland Exp $ +.\" +.TH LBDBQ 1 "September 2007" "Unix" "User Manuals" +.SH NAME +lbdbq \- query program for the little brother's database +.SH SYNOPSIS +.B lbdbq +.I something +.br +.B lbdbq +.RB [ -v | --version | -h | --help ] +.SH DESCRIPTION +.B lbdbq +is the client program for the little brother's database. It will +attempt to invoke various modules to gather information about persons +matching +.IR something . +E.g., it may look at a list of addresses from which you have received +mail, it may look at YP maps, or it may try to finger +.IR something @ "<various hosts>" . +.PP +The behavior is configurable: Upon startup, +.B lbdbq +will source the shell scripts: +.RS +.I @sysconfdir@/lbdb.rc +.br +.I $HOME/.lbdbrc +.br +.I $HOME/.lbdb/lbdbrc +.br +.I $HOME/.lbdb/rc +.RE +if they exist. +.PP +They can be used to set the following global variables: +.TP +.B MODULES_PATH +a space separated list of directories, where +.B lbdbq +should look for modules. +.TP +.B METHODS +a space separated list of the modules to use. +.TP +.B SORT_OUTPUT +If you set this to +.I false +or +.IR no , +lbdbq won't sort the addresses but returns them in reverse order +(which means that the most recent address in m_inmail database is +first). If you set this to +.IR name , +lbdbq sorts the output by real name. If you set this to +.IR comment , +it sort the output by the comment (for example the date in +.BR m_inmail ). +.I reverse_comment +realizes the same as +.IR comment , +but in reverse order, so the most recent timestamp of m_inmail may be +on top. If you set SORT_OUTPUT to +.IR address , +lbdbq sorts the output by addresses (that's the default). +.TP +.B KEEP_DUPES +If you set this to +.I true +or +.IR yes , +lbdbq won't remove duplicate addresses with different real name +comment fields. +.PP +Note that there +.I are +defaults, so you should most +probably modify these variables using constructs like this: +.nf + MODULES_PATH="$MODULES_PATH $HOME/lbdb_modules" +.fi +.PP +Additionally, modules may have configuration variables of +their own. +.SH MODULES +Currently, the following modules are supplied with lbdb: +.TP +.B m_finger +This module will use finger to find out something more about a person. +The list of hosts do be asked is configurable; use the +.B M_FINGER_HOSTS +variable. Note that "localhost" will mean an invocation of your local +.BR finger (1) +binary, and should thus work even if you don't provide the finger +service to the network. +.B m_finger +tries to find out the machines mail domain name in +.IR /etc/mailname , +by parsing a +.I sendmail.cf +file (if it finds one) and by reading +.I /etc/hostname +and +.IR /etc/HOSTNAME . +If you know that this fails on your machine, or you want to force lbdbq +to consider some other name to be the local mail domain name (misconfigured +SUNs come to mind here), you can specify a name using the +.B MAIL_DOMAIN_NAME +variable. If this variable is set by you, no probing will be done by +.BR lbdbq . +.TP +.B m_inmail +This module will look up user name fragments in a list of mail +addresses created by +.BR lbdb-fetchaddr (1). +.TP +.B m_passwd +This module searches for matching entries in your local /etc/passwd +file. It evaluates the local machine mail domain in the same way +.B m_finger +does. If you set +.BR PASSWD_IGNORESYS=true , +this module ignores all system accounts and only finds UIDs between +1000 and 29999 (all other UIDs are reserved on a Debian system). +.TP +.B m_yppasswd +This module searches for matching entries in the NIS password database +using the command ``ypcat passwd''. +.TP +.B m_nispasswd +This module searches for matching entries in the NIS+ password database +using the command ``niscat passwd.org_dir''. +.TP +.B m_getent +This module searches for matching entries in whatever password +database is configured using the command ``getent passwd''. +.TP +.BR m_pgp2 ", " m_pgp5 ", " m_gpg +These modules scan your PGP 2.*, PGP 5.* or GnuPG public key ring for +data. They use the programs +.BR pgp (1), +.BR pgpk (1), +or +.BR gpg (1) +to get the data. +.TP +.BR m_fido +This module searches your Fido nodelist, stored in +.I $HOME/.lbdb/nodelist +created by +.BR nodelist2lbdb (1). +.TP +.BR m_abook +This module uses the program +.BR abook (1), +a text based address book application to search for addresses. You +can define multiple abook address books by setting the variable +.B ABOOK_FILES +to a space separated list. +.TP +.BR m_addr_email +This module uses the program +.BR addr-email (1), +a text based frontend to the Tk +.BR addressbook (1) +application. +.TP +.BR m_muttalias +This module searches the variable +.B MUTTALIAS_FILES +(a space separated list) of files in +.B MUTT_DIRECTORY +that contain mutt aliases. File names without leading slash will have +.B MUTT_DIRECTORY +(defaults to +.BI $HOME /.mutt +or +.BR $HOME , +if +.BI $HOME /.mutt +does not exist) prepended before the file name. Absolute file names +(beginning with +.IR / ) +will be taken direct. +.TP +.BR m_pine +This module searches +.BR pine (1) +addressbook files for aliases. To realize this it first inspects the +variable +.BR PINERC . +If it isn't set, the default +.RI ` "/etc/pine.conf /etc/pine.conf.fixed .pinerc" ' +is used. To suppress inspecting the +.B PINERC +variable, set it to +.IR no . +It than takes all +.B address-book +and +.B global-address-book +entries from these pinerc files and adds the contents of the variable +.B PINE_ADDRESSBOOKS +to the list, which defaults to +.RI ` "/etc/addressbook .addressbook" '. +Then these addressbooks are searched for aliases. All filenames +without leading slash are searched in +.BR $HOME . +.TP +.BR m_palm +This module searches the Palm address database using the +.BR Palm::PDB (3pm) +and +.BR Palm::Address (3pm) +Perl modules from CPAN. +It searches in the variable +.B PALM_ADDRESS_DATABASE +or if this isn't set in +.IR $HOME/.jpilot/AddressDB.pdb . +.TP +.BR m_gnomecard +This module searches for addresses in your GnomeCard database files. +The variable +.B GNOMECARD_FILES +is a whitespace separated list of GnomeCard data files. If this +variable isn't defined, the module searches in +.BI $HOME /.gnome/GnomeCard +for the GnomeCard database or at least falls back to +.BI $HOME /.gnome/GnomeCard.gcrd\fR. +If a filename does not start with a slash, it is prefixed with +.BR $HOME/ . +.TP +.BR m_bbdb +This module searches for addresses in your (X)Emacs BBDB (big brother +database). It doesn't access ~/.bbdb directly (yet) but calls +.BR emacs (1) +or +.BR xemacs (1) +with a special mode to get the information (so don't expect too much +performance in this module). You can configure the +.B EMACS +variable to tell this module which emacsen to use. Otherwise it will +fall back to +.B emacs +or +.BR xemacs. +.TP +.BR m_ldap +This module queries an LDAP server using the +.BR Net::LDAP (3pm) +Perl modules from CPAN. It can be configured using an external +resource file +.I @sysconfdir@/lbdb_ldap.rc +You can explicity define a LDAP query in this file or you can use one +or more of the predefined queries from the +.B %ldap_server_db +in this file. For this you have to define a space separated list of +nicknames from entries in the variable +.BR LDAP_NICKS . +.TP +.BR m_wanderlust +This module searches for addresses stored in your +.I $WANDERLUST_ADDRESSES +(or by default in +.IR $HOME/.addresses ) +file, an addressbook of +.BR WanderLust . +.TP +.BR m_osx_addressbook +This module queries the OS X AddressBook. It is only available on OS +X systems. +.TP +.BR m_evolution +This module queries the Ximian Evolution address book. It depends on +the program +.BR evolution-addressbook-export , +which is shipped with evolution. +.TP +.BR m_vcf +This module uses libvformat to search for addresses from the +space\-separated set of vCard files defined in +.IR $VCF_FILES . +.PP +Feel free to create your own modules to query other database resources, +YP maps, and the like. +.B m_finger +should be a good example of how to do it. +.PP +If you create your own modules or have other changes and feel that +they could be helpful for others, don't hesitate to submit them to the +author for inclusion in later releases. +.PP +Finally, to use +.B lbdbq +from mutt, add the following line to your +.I $HOME/.muttrc: +.nf + set query_command="lbdbq %s" +.fi +.SH OPTIONS +.IP "-v | --version" +Print version number of lbdbq. +.IP "-h | --help" +Print short help of lbdbq. +.SH FILES +.I @sysconfdir@/lbdb.rc +.br +.I $HOME/.lbdbrc +.br +.I $HOME/.lbdb/lbdbrc +.br +.I $HOME/.lbdb/rc +.br +.I @libdir@/* +.br +.I $HOME/.lbdb/m_inmail.list +.br +.I $HOME/.lbdb/nodelist +.SH "SEE ALSO" +.BR finger (1), +.BR ypcat (1), +.BR niscat (1), +.BR getent (1), +.BR pgp (1), +.BR pgpk (1), +.BR gpg (1), +.BR lbdb-fetchaddr (1), +.BR nodelist2lbdb (1), +.BR mutt_ldap_query (1), +.BR abook (1), +.BR addr-email (1), +.BR addressbook (1), +.BR mutt (1), +.BR pine (1), +.BR emacs (1), +.BR xemacs (1), +.BR Palm::PDB (3pm), +.BR Palm::Address (3pm), +.BR Net::LDAP (3pm). +.SH CREDITS +Most of the really interesting code of this program (namely, the RFC +822 address parser used by lbdb-fetchaddr) was stolen from Michael +Elkins' mutt mail user agent. Additional credits go to Brandon Long +for putting the query functionality into mutt. +.PP +Many thanks to the authors of the several modules and extensions: +Ross Campbell <rcampbel@us.oracle.com> (m_abook, m_yppasswd), +Marc de Courville <marc@courville.org> (m_ldap, mutt_ldap_query), +Brendan Cully <brendan@kublai.com> (m_osx_addressbook, m_vcf), +Gabor Fleischer <flocsy@mtesz.hu> (m_pine), +Rick Frankel <rick@rickster.com> (m_gnomecard), +Utz-Uwe Haus <haus@uuhaus.de> (m_bbdb, m_nispasswd), +Torsten Jerzembeck <toje@nightingale.ms.sub.org> (m_addr_email), +Adrian Likins <alikins@redhat.com> (m_getent), +Gergely Nagy <algernon@debian.org> (m_wanderlust), +Dave Pearson <davep@davep.org> (m_palm, lbdb.el), and +Brian Salter-Duke <b_duke@bigpond.net.au> (m_muttalias). +.SH AUTHOR +The lbdb package was initially written by Thomas Roessler +<roessler@guug.de> and is now maintained and heavily extended by +Roland Rosenfeld <roland@spinnaker.de>. diff --git a/share/lbdb/lbdbq.sh.in b/share/lbdb/lbdbq.sh.in @@ -0,0 +1,116 @@ +#! @SH@ +# +# Copyright (C) 1998-2000 Thomas Roessler <roessler@guug.de> +# 1998-2007 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: lbdbq.sh.in,v 1.27 2007-05-20 13:00:44 roland Exp $ + +LBDB_VERSION=@LBDB_VERSION@ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sysconfdir=@sysconfdir@ + +METHODS="@MODULES@" +MODULES_PATH=@libdir@ +TAC=@TAC@ + +case "$1" in + -v|--version) + echo "lbdbq version $LBDB_VERSION" + exit 0 + break;; + -h|--help) + PROG=`basename $0` + echo "Usage: $PROG 'something' search addresses matching 'something'" + echo " $PROG -v|--version print version of lbdbq" + echo " $PROG -h|--help this short help" + exit 0 + break;; +esac + +. $libdir/lbdb_lib + +tmpdir=${TMPDIR-/tmp}/query.`hostname`.$$ +mkdir $tmpdir || exit 1 +trap "rm -rf $tmpdir ; trap '' 0; exit 1" 0 1 2 3 15 +trap "rm -rf $tmpdir ; trap '' 0" 0 +collection=$tmpdir/coll + +for conffile in $sysconfdir/lbdb.rc $HOME/.lbdbrc \ + $HOME/.lbdb/lbdbrc $HOME/.lbdb/rc ; do + + if test -f $conffile ; then + . $conffile + fi + +done + +for method in $METHODS ; do + for CURRENT_MODULE_DIR in $MODULES_PATH ; do + if test -f $CURRENT_MODULE_DIR/$method ; then + . $CURRENT_MODULE_DIR/$method + break + fi + done +done + +for method in $METHODS ; do + eval ${method}_query \""$@"\" >> $collection || true +done + +case "${KEEP_DUPES:-}" in + true|yes) + MUNGE=cat + MUNGE_KEEPORDER=cat + ;; + *) + MUNGE=$libdir/munge + MUNGE_KEEPORDER=$libdir/munge-keeporder + ;; +esac + +case "${SORT_OUTPUT:-}" in + false|no) + $MUNGE_KEEPORDER $collection | $TAC > $collection.uniq + ;; + *name) + $MUNGE $collection | sort -f -k2 > $collection.uniq + ;; + reverse_comment) + $MUNGE $collection | sort -f -k3 -t' ' -r > $collection.uniq + ;; + comment) + $MUNGE $collection | sort -f -k3 -t' ' > $collection.uniq + ;; + *) + $MUNGE $collection | sort -f > $collection.uniq + ;; +esac + +lines=`wc -l $collection.uniq | awk '{print $1}'` + +if [ $lines = "0" ] +then + echo "lbdbq: no matches" + exit 1 +else + echo "lbdbq: $lines matches" +fi + +cat $collection.uniq diff --git a/share/lbdb/m_abook.sh.in b/share/lbdb/m_abook.sh.in @@ -0,0 +1,39 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (C) 2000 Ross Campbell <rcampbel@us.oracle.com> +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_abook.sh.in,v 1.6 2005-10-29 14:48:09 roland Exp $ + +m_abook_query() +{ + ABOOK=@ABOOK@ + + if [ -x "$ABOOK" ] # check whether abook in installed + then + for book in ${ABOOK_FILES:-$HOME/.abook/addressbook $HOME/.abook.addressbook} + do + if [ -f "$book" ] + then + $ABOOK --datafile $book --mutt-query "$@" \ + | sed -e '1d;s/$/ abook/' + fi + done + fi +} diff --git a/share/lbdb/m_addr_email.sh.in b/share/lbdb/m_addr_email.sh.in @@ -0,0 +1,39 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (C) 2000 Torsten Jerzembeck <toje@nightingale.ms.sub.org> +# Copyright (C) 2000 Ross Campbell <rcampbel@us.oracle.com> +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# This is a frontend to addr-email(1) from the addressbook(1) package, +# which can be found at http://red.roses.de/~clemens/addressbook/. +# +# $Id: m_addr_email.sh.in,v 1.6 2009-06-11 10:56:22 roland Exp $ + +m_addr_email_query() +{ + ADDR_EMAIL=@ADDR_EMAIL@ + + if [ -x "$ADDR_EMAIL" ] # check whether addr-email in installed + then + $ADDR_EMAIL "$@" \ + | sed -e 's/^\([^,]*\), \([^:]*\): \(.*\)$/\3 \1 \2/' \ + | grep -a '@' || : +# | sed -e 's/\(.*\):[ ]\([^ ].*$\)/\2 \1 addr-email/' + fi +} diff --git a/share/lbdb/m_bbdb.sh.in b/share/lbdb/m_bbdb.sh.in @@ -0,0 +1,68 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (c) 2001 Utz-Uwe Haus <haus@uuhaus.de> 2001 +# Copyright (c) 2003 Aaron Kaplan <kaplan@cs.rochester.edu> +# Copyright (c) 2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_bbdb.sh.in,v 1.9 2009-06-11 10:56:22 roland Exp $ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ + +m_bbdb_query() +{ + if [ -f ${LBDB_BBDB_SCRIPT:=$libdir/lbdb_bbdb_query.el} ] + then + form="(progn (require (quote lbdb-bbdb-query) + \"$LBDB_BBDB_SCRIPT\") + (lbdb-bbdb-query \"$@\"))" + if [ -z "$GNUCLIENT" ] + then + if type gnuclient >/dev/null 2>&1; then + GNUCLIENT=gnuclient + fi + fi + if [ "$GNUCLIENT" = "no" ]; then + GNUCLIENT= + fi + + + success=0 + if [ -n "$GNUCLIENT" ] ; then + if $GNUCLIENT -batch -eval "$form" 2> /dev/null; then + success=1 + fi + fi + if [ $success = 0 ]; then + if [ -z "$EMACS" ] + then + if type emacs >/dev/null 2>&1; then + EMACS=emacs + elif type xemacs >/dev/null 2>&1; then + EMACS=xemacs + fi + fi + if [ -n "$EMACS" ] ; then + $EMACS -nw --no-site-file --no-init-file -batch \ + --eval "$form" 2>/dev/null + fi + fi + fi | grep -va '^$' || : +} diff --git a/share/lbdb/m_evolution.sh.in b/share/lbdb/m_evolution.sh.in @@ -0,0 +1,83 @@ +#! @SH@ +# +# -*-sh-*- +# +# m_evolution - Evolution Address book module for lbdb +# Copyright (C) 2004 Guido Guenther <agx@sigxcpu.org> +# Copyright (C) 2004-2011 Roland Rosenfeld <roland@spinnaker.de> +# Copyright (C) 2008 brian m. carlson <sandals@crustytoothpaste.ath.cx> +# Copyright (C) 2009 Jan Larres <jan@majutsushi.net> +# +# loosely based on m_gnomecard +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. +# + +m_evolution_query () +{ + AWK=@AWK@ + EVOLUTION_ADDRESSBOOK_EXPORT=@EVOLUTION_ADDRESSBOOK_EXPORT@ + + if [ "$EVOLUTION_ADDRESSBOOK_EXPORT" = "auto" ]; then + for e in /usr/lib/evolution/*/evolution-addressbook-export + do + if [ -x $e ]; then + EVOLUTION_ADDRESSBOOK_EXPORT=$e + fi + done + fi + + if [ -x $EVOLUTION_ADDRESSBOOK_EXPORT ]; then + $EVOLUTION_ADDRESSBOOK_EXPORT 2>/dev/null \ + | $AWK 'BEGIN { + FS = ":" + RS = "\r\n" + name = "" + emails = "" + last_email = 0 + } + /^END:VCARD/ { + if ((name != "" || fileas != "") && emails != "") { + sub("^#", "", emails) + split(emails, emails_arr, "#") + for (email in emails_arr) + printf("%s\t%s\tEV:%s\n",emails_arr[email],name,fileas) + } + name = ""; fileas = ""; emails = "" + } + /^FN:/ { + name = $2 + } + /^X-EVOLUTION-FILE-AS:/ { + fileas = $2 + gsub("\\\\", "", fileas) + } + # DEST-EMAIL is needed to skip addresses in list contacts + /^EMAIL[;:]/ && ! /X-EVOLUTION-DEST-EMAIL/ { + emails = emails "#" $2 + last_email = 1 + } + # only join email lines for performance reasons + /^ [^ ]/ && last_email == 1 { + cont = $1 + sub("^ ", "", cont) + emails = emails cont + } + ! /^EMAIL[;:]/ && ! /^ [^ ]/ { + last_email = 0 + }' \ + | grep -ia "$@" || : + fi +} diff --git a/share/lbdb/m_fido.sh.in b/share/lbdb/m_fido.sh.in @@ -0,0 +1,30 @@ +#! @SH@ +# +# -*-sh-*- +# +# $Id: m_fido.sh.in,v 1.8 2009-06-11 10:56:22 roland Exp $ +# +# Copyright (C) 1998-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# + +m_fido_db=$HOME/.lbdb/nodelist + +m_fido_query() +{ + test -f $m_fido_db || return + grep -ia "$@." $m_fido_db || : +} diff --git a/share/lbdb/m_finger.sh.in b/share/lbdb/m_finger.sh.in @@ -0,0 +1,51 @@ +#! @SH@ + +# -*-sh-mode-*- + +# Copyright (C) 1998 Thomas Roessler <roessler@guug.de> +# Copyright (C) 2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. + +# $Id: m_finger.sh.in,v 1.10 2009-06-11 10:56:22 roland Exp $ + +m_finger_query() +{ + FINGER=@FINGER@ + + if [ -x "$FINGER" ] # check whether finger in installed + then + + f_user="`echo \"$@\" | sed 's/@.*//'`" + + if test "x$M_FINGER_HOSTS" = x ; then + M_FINGER_HOSTS="localhost" + fi + + for host in $M_FINGER_HOSTS ; do + if test "$host" = "localhost" ; then + athost="" + mailhost="`lbdb_hostname`" + else + athost="@$host" + mailhost="$host" + fi + $FINGER $f_user$athost 2> /dev/null \ + | sed -n -e "s/^Login: *\([^ ]*\)[ ]*Name: \(.*\)$/\1@$mailhost \2 (finger)/p" \ + -e "s/^Login name: *\([^ ]*\)[ ]*In real life: \(.*\)$/\1@$mailhost \2 (finger)/p" \ + | grep -av 'In real life: ???' || : + done + fi +} diff --git a/share/lbdb/m_getent.sh.in b/share/lbdb/m_getent.sh.in @@ -0,0 +1,37 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 2000-2001 Ross Campbell <rcampbel@us.oracle.com> +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_getent.sh.in,v 1.5 2005-10-29 14:48:09 roland Exp $ + +m_getent_query() +{ + GETENT=@GETENT@ + + if [ -x "$GETENT" ] #check for getent + then + f_user="`echo \"$@\" | sed -e 's/@.*//'`" + HOST="`lbdb_hostname`" + + $GETENT passwd \ + | grep -ia "$f_user" \ + | sed -e "s/^\([^:]*\):[^:]*:\([^:]*\):[^:]*:\([^:,]*\)[,:].*\$/\1@$HOST \3 UID \2/" + fi +} diff --git a/share/lbdb/m_gnomecard.sh.in b/share/lbdb/m_gnomecard.sh.in @@ -0,0 +1,71 @@ +#! @SH@ +# +# -*-sh-*- +# +# m_gnomecard - GnomeCard Address book module for lbdb +# Copyright (C) 2000 Rick Frankel <rick@rickster.com> +# 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_gnomecard.sh.in,v 1.9 2009-06-11 10:56:22 roland Exp $ +# + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +AWK=@AWK@ + +rcfile=$HOME/.gnome/GnomeCard + +m_gnomecard_query () +{ + if [ -z "$GNOMECARD_FILES" ] + then + if [ -r "$rcfile" ] + then + GNOMECARD_FILES=`\ + $AWK 'BEGIN {FS="="; infile=0} \ + /^\[.*\]/ {infile=0} \ + /^\[file\]/ {infile=1} \ + infile && /^open=/ {print $2}' \ + < $rcfile` + fi + if [ -z "$GNOMECARD_FILES" ] + then + GNOMECARD_FILES="$HOME/.gnome/GnomeCard.gcrd" + fi + fi + + for file in $GNOMECARD_FILES + do + if [ $file = ${file#/} ] + then + file=$HOME/$file + fi + + if [ -f $file ] + then + $AWK 'BEGIN {FS=":"; RS="\r\n"; name=""} \ + /^END:VCARD/ {name=""} \ + /^FN[:;]/ {name=$2} \ + name!="" && /^EMAIL;/ {email=$2; \ + type=substr($1,7); \ + printf ("%s\t%s\tGC:%s\n", \ + email, name, type) }' \ + < $file | grep -ia "$@" || : + fi + done +} diff --git a/share/lbdb/m_gpg.sh.in b/share/lbdb/m_gpg.sh.in @@ -0,0 +1,42 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 1998-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_gpg.sh.in,v 1.26 2009-06-11 10:56:22 roland Exp $ +# + +m_gpg_query() +{ + GPG=@GPG@ + + if [ -x "$GPG" ] + then + $GPG --list-keys --with-colons "$@" 2>/dev/null \ + | grep -a '^\(pub\|uid\):[^re]:\([^:]*:\)\{7,7\}[^<>:]* <[^<>@: ]*@[^<>@: ]*>[^<>@:]*:' \ + | sed -e 's/^\([^:]*:\)\{9,9\}\([^<:]*\) <\([^>:]*\)>.*:.*$/\3 \2 (GnuPG)/' \ + | sed -e 's/ \([^ ]\{27,27\}\)[^ ]* / \1... /' \ + | grep -ia "$@" || : + +# $GPG --list-keys --no-greeting "$@" 2>/dev/null \ +# | grep -a '^\(pub\|uid\) .\{25,25\} [^<>]* <[^<>@ ]*@[^<>@ ]*>' \ +# | sed -e 's/^.\{24,31\}\([^<]*\) <\([^>]*\)>.*$/\2 \1 (GnuPG)/' \ +# | sed -e 's/ \([^ ]\{27,27\}\)[^ ]* / \1... /' \ +# | grep -ia "$@" + fi +} diff --git a/share/lbdb/m_inmail.sh.in b/share/lbdb/m_inmail.sh.in @@ -0,0 +1,34 @@ +#! @SH@ +# +# Copyright (C) 1998-2000 Thomas Roessler <roessler@guug.de> +# 1999-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_inmail.sh.in,v 1.14 2009-06-11 10:56:22 roland Exp $ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ + +m_inmail_db=$HOME/.lbdb/m_inmail.list + +m_inmail_query() +{ + export SORT_OUTPUT + $libdir/lbdb-munge + test -f $m_inmail_db || return + grep -ia "$@." $m_inmail_db || : +} diff --git a/share/lbdb/m_ldap.sh.in b/share/lbdb/m_ldap.sh.in @@ -0,0 +1,39 @@ +#! @SH@ +# +# -*-sh-*- +# +# m_ldap - ldap module for lbdb +# Copyright (C) 2001 Marc de Courville <marc@courville.org> +# +# $Id: m_ldap.sh.in,v 1.6 2009-06-11 10:56:22 roland Exp $ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ + +m_ldap_query () +{ + if [ "$LDAP_NICKS" != "" ] + then + for NICK in $LDAP_NICKS + do + $libdir/mutt_ldap_query --lbdb_output --nickname=$NICK "$@" || : + done + else + $libdir/mutt_ldap_query --lbdb_output "$@" || : + fi +} diff --git a/share/lbdb/m_muttalias.sh.in b/share/lbdb/m_muttalias.sh.in @@ -0,0 +1,46 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 2000 Brian Salter-Duke <b_duke@bigpond.net.au> +# 2000-2007 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_muttalias.sh.in,v 1.11 2009-06-11 10:56:22 roland Exp $ + +m_muttalias_query() +{ + [ -d ${MUTT_DIRECTORY:=$HOME/.mutt} ] || MUTT_DIRECTORY=$HOME + + for file in ${MUTTALIAS_FILES:-.muttrc .mail_aliases muttrc aliases} ; do + if [ $file = ${file#/} ] + then + file=$MUTT_DIRECTORY/$file + fi + + if [ -f "$file" ] + then + grep -ia "$@" $file \ + | grep -a '^alias[ ][ ]*[^,][^,]*[ ][ ]*\([^,]\|\\\".*\\\"\)*$' \ + | sed -e 's/^alias[ ][ ]*\([^ ][^ ]*\)[ ][ ]*<\([^ >][^ >]*\)>[ ][ ]*(\([^<>()]*\))[^()<>]*$/\2 \3 alias \1/' \ + -e 's/^alias[ ][ ]*\([^ ][^ ]*\)[ ][ ]*\(\\\".*\\\"[^<>()]*\|[^<>()]*\)<\([^<>()]*\)>[^<>]*$/\3 \2 alias \1/' \ + -e 's/^alias[ ][ ]*\([^ ][^ ]*\)[ ][ ]*\([^<>()]*\)(\(\\\".*\\\"[^<>()]*\|[^<>()]*\))[^()<>]*$/\2 \3 alias \1/' \ + -e 's/\\\"//g' \ + | grep -va '^alias[ ][ ]*[^,][^,]*[ ][ ]*[^,]*$' || : + fi + done +} + diff --git a/share/lbdb/m_nispasswd.sh.in b/share/lbdb/m_nispasswd.sh.in @@ -0,0 +1,38 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (C) 2000 Ross Campbell <rcampbel@us.oracle.com> +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# Copyright (C) 2001 Utz-Uwe Haus <haus@uuhaus.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_nispasswd.sh.in,v 1.4 2005-10-29 14:48:10 roland Exp $ + +m_nispasswd_query() +{ + NISCAT=@NISCAT@ + + if [ -x "$NISCAT" ] #check for niscat + then + f_user="`echo \"$@\" | sed -e 's/@.*//'`" + HOST="`lbdb_hostname`" + + $NISCAT passwd.org_dir \ + | grep -ia "$f_user" \ + | sed -e "s/^\([^:]*\):[^:]*:\([^:]*\):[^:]*:\([^:,]*\)[,:].*\$/\1@$HOST \3 UID \2/" + fi +} diff --git a/share/lbdb/m_osx_addressbook.sh.in b/share/lbdb/m_osx_addressbook.sh.in @@ -0,0 +1,28 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 2003 Brendan Cully <brendan@kublai.com> +# Copyright (C) 2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# + +libdir=@libdir@ + +m_osx_addressbook_query() +{ + $libdir/ABQuery "$@" | grep -ia "$@" || : +} diff --git a/share/lbdb/m_palm.sh.in b/share/lbdb/m_palm.sh.in @@ -0,0 +1,34 @@ +#! @SH@ +# +# -*-sh-*- +# +# m_palm - Palm address database module for lbdb +# Copyright (C) 2000 Dave Pearson <davep@davep.org> +# Copyright (C) 2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_palm.sh.in,v 1.8 2009-06-11 10:56:22 roland Exp $ + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ + +m_palm_query () +{ + palmdatabase=${PALM_ADDRESS_DATABASE:-$HOME/.jpilot/AddressDB.pdb} + test -f $palmdatabase || return + $libdir/palm_lsaddr $palmdatabase | grep -ia "$@" || : +} diff --git a/share/lbdb/m_passwd.sh.in b/share/lbdb/m_passwd.sh.in @@ -0,0 +1,38 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 1999-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_passwd.sh.in,v 1.13 2009-06-11 10:56:22 roland Exp $ +# + +m_passwd_query() +{ + HOST="`lbdb_hostname`" + case "$PASSWD_IGNORESYS" in + true|yes|1) + IGNORESYS='UID \([12]....\|....\)$' + ;; + *) + IGNORESYS='.' + ;; + esac + + sed -e "s/^\([^:]*\):[^:]*:\([^:]*\):[^:]*:\([^:,]*\)[,:].*\$/\1@$HOST \3 UID \2/" /etc/passwd \ + | grep -ia "$@" | grep -a "$IGNORESYS" || : +} diff --git a/share/lbdb/m_pgp2.sh.in b/share/lbdb/m_pgp2.sh.in @@ -0,0 +1,35 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 1998-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_pgp2.sh.in,v 1.11 2005-10-29 14:48:10 roland Exp $ +# + +m_pgp2_query() +{ + PGP=@PGP@ + + if [ -x "$PGP" ] + then + $PGP +language=en -kv "$@" 2>/dev/null \ + | grep -a '^[^<>]\{32,\} <[^<>@:/ ]*@[^<>@ ]*>[^<>@]*$' \ + | sed -e 's/^.\{30,30\}\(.*\) <\([^:]*\)>.*$/\2 \1 (PGP2)/' \ + | sed -e 's/ \([^ ]\{27,27\}\)[^ ]* / \1... /' + fi +} diff --git a/share/lbdb/m_pgp5.sh.in b/share/lbdb/m_pgp5.sh.in @@ -0,0 +1,36 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 1999-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_pgp5.sh.in,v 1.13 2009-06-11 10:56:22 roland Exp $ +# + +m_pgp5_query() +{ + PGPK=@PGPK@ + + if [ -x "$PGPK" ] + then + $PGPK +language=en -l "$@" 2>/dev/null \ + | grep -a '^uid ...* <[^<>@:/ ]*@[^<>@ ]*>[^<>@]*$' \ + | sed -e 's/^uid \(.*\) <\(.*\)>.*$/\2 \1 (PGP5)/' \ + | sed -e 's/ \([^ ]\{27,27\}\)[^ ]* / \1... /' \ + | grep -ia "$@" || : + fi +} diff --git a/share/lbdb/m_pine.sh.in b/share/lbdb/m_pine.sh.in @@ -0,0 +1,132 @@ +#! @SH@ +# +# -*-sh-*- +# +# Copyright (C) 2000 Gabor Fleischer <flocsy@mtesz.hu> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_pine.sh.in,v 1.10 2005-10-29 14:48:10 roland Exp $ + +# m_pine for lbdb v0.9 by Gabor Fleischer <flocsy@mtesz.hu> +# +# Two variabled can be set in lbdbrc: PINERC, PINE_ADDRESSBOOKS +# Here comes the explanation what are they for: +# 1. First I look for $PINERC. If not set, then I use my defaults: +# PINERC="/etc/pine.conf /etc/pine.conf.fixed .pinerc" +# If you don't want me to look in the default PINERCs, then set PINERC=no +# 2. I make a list of all the addressbooks in the PINERCs. +# 3. Then the $PINE_ADDRESSBOOKS are added to this list. +# 4. And if this list is still empty then add the default addressbooks: +# PINE_ADDRESSBOOKS="/etc/addressbook .addressbook" +# 5. Make the query in the listed addressbooks +# +# Changelog: +# 0.9: Convert Quoted-Printable in the real names into plain 8bit. +# 0.8: When the 'real name' is missing, put " " there, so mutt works fine. +# 0.7: Fixed bugs: +# * Search was case sensitive. Now it's insensitive. +# * Lines with missing fields (i.e."nick<tab><tab>addr") were broken. +# * Default didn't work if address-books in pinercs were "". +# 0.6: The .addressbook format's multi-line addresses are supported. +# 0.5: Initial release. +# + +AWK=@AWK@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +qpto8bit=@libdir@/qpto8bit + +m_pine_query() +{ + addressbooks= + if [ x$PINERC != xno ] ; then + for pinerc in ${PINERC:-/etc/pine.conf /etc/pine.conf.fixed .pinerc} + do + if [ $pinerc = ${pinerc#/} ] ; then + pinerc=$HOME/$pinerc + fi + if [ -f $pinerc ] ; then + addressbook=`\ + $AWK 'BEGIN {SPACE="";} \ + /^(global-)?address-book[ ]*=/ { \ + sub("^(global-)?address-book[ ]*=",""); \ + while (/[ ]*[^ ]+[ ]+([^ , ]+)[ ]*,/) { \ + sub("[ ]*[^ ]+[ ]+",""); \ + sub("[ , ].*",""); \ + printf("%s%s",SPACE,$0); \ + SPACE=" "; \ + getline; \ + } \ + sub("[ ]*[^ ]+[ ]+",""); \ + sub("[ ].*",""); \ + printf("%s%s",SPACE,$0); \ + SPACE=" "; \ + }' < $pinerc` + fi + addressbooks="${addressbook# } ${addressbooks# }" + done + fi + addressbooks="${PINE_ADDRESSBOOKS} ${addressbooks# }" + addressbooks=${addressbooks# } + for file in ${addressbooks:=/etc/addressbook .addressbook} ; do + if [ $file = ${file#/} ] ; then + file=$HOME/$file + fi + if [ -f $file ] + then + cat $file | $qpto8bit | $AWK -v find="$@" '\ + function out() { \ + if (match(tolower(line),low_find)) { + #order: nick full addr fcc comm \ + R[1] = "^[^ ]*"; \ + R[2] = "^[^ ]* [^ ]*"; \ + R[3] = "^[^ ]* [^ ]* \\(?[^ ]*\\)?"; \ + R[4] = "^[^ ]* [^ ]* [^ ]* [^ ]*"; \ + R[5] = "^[^ ]* [^ ]* [^ ]* [^ ]* [^ ]*"; \ + beg = 1; \ + for (i=1;i<=5;i++) { \ + match(line,R[i]); \ + A[i] = substr(line,beg,RLENGTH-beg+1); \ + beg = RLENGTH+2; \ + } \ + if (A[2] == "") {A[2] = " "} \ + if (match(A[3],/\(.*\)/)) {A[3] = substr(A[3],2,length(A[3])-2)} \ + if (A[5] != "") {A[5] = " [" A[5] "]"} \ + printf "%s %s %s%s (pine)\n",A[3],A[2],A[1],A[5]; \ + } \ + } \ + BEGIN { \ + FS=" "; \ + low_find = tolower(find); \ + getline; \ + while (/^#DELETED/) {getline} ; \ + line = $0 \ + } \ + $0 !~ /^#DELETED/ { \ + if (/^ /) { \ + gsub(" ",""); \ + line = line $0; \ + } else { \ + out(); \ + line = $0; \ + } \ + } \ + END { \ + out() \ + }' + fi + done +} diff --git a/share/lbdb/m_vcf.sh.in b/share/lbdb/m_vcf.sh.in @@ -0,0 +1,44 @@ +#! @SH@ +# +# Copyright (C) 2005 Brendan Cully <brendan@kublai.com> +# Copyright (C) 2011 Jamey Sharp <jamey@minilop.net> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_vcf.sh.in,v 1.5 2011-06-25 14:22:09 roland Exp $ + +m_vcf_query() +{ + VCQ=@libdir@/vcquery + + QUERY="$1" + + for file in $VCF_FILES + do + if test -r $file.cache -a $file.cache -nt $file + then + cmd="cat $file.cache" + else + if $VCQ $file > $file.cache + then + cmd="cat $file.cache" + else + cmd="$VCQ $file" + fi + fi + + $cmd | grep -ie "$QUERY" | sed 's/(null)$/ /; s/ $/ (VCF)/' + done +} diff --git a/share/lbdb/m_wanderlust.sh.in b/share/lbdb/m_wanderlust.sh.in @@ -0,0 +1,33 @@ +#! @SH@ +## -*- sh -*- +## +## Copyright (C) 2002 Gergely Nagy <algernon@debian.org> +## Copyright (C) 2002-2005 Roland Rosenfeld <roland@spinnaker.de> +## +## This program is free software; you can redistribute it and/or modify +## it under the terms of the GNU General Public License as published by +## the Free Software Foundation; either version 2 of the License, or +## (at your option) any later version. +## +## This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +## GNU General Public License for more details. +## +## You should have received a copy of the GNU General Public License +## along with this program; if not, write to the Free Software Foundation, +## Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_wanderlust.sh.in,v 1.7 2009-06-11 10:56:22 roland Exp $ + +m_wanderlust_query() +{ + addresses=${WANDERLUST_ADDRESSES:-${HOME}/.addresses} + + if [ -f $addesses ] + then + grep -ia "$@" $addresses \ + | sed -e 's,^\([^ ]\+\)[ ]\+"\([^"]*\)"[ ]\+"\([^"]\+\)",\1 \3 wl \2,g' \ + | grep -a '^[^ ][^ ]* [^ ][^ ]* wl ' || : + fi +} diff --git a/share/lbdb/m_yppasswd.sh.in b/share/lbdb/m_yppasswd.sh.in @@ -0,0 +1,37 @@ +#! @SH@ +# +# -*-sh-mode-*- +# +# Copyright (C) 2000 Ross Campbell <rcampbel@us.oracle.com> +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: m_yppasswd.sh.in,v 1.5 2005-10-29 14:48:11 roland Exp $ + +m_yppasswd_query() +{ + YPCAT=@YPCAT@ + + if [ -x "$YPCAT" ] #check for ypcat + then + f_user="`echo \"$@\" | sed -e 's/@.*//'`" + HOST="`lbdb_hostname`" + + $YPCAT passwd \ + | grep -ia "$f_user" \ + | sed -e "s/^\([^:]*\):[^:]*:\([^:]*\):[^:]*:\([^:,]*\)[,:].*\$/\1@$HOST \3 UID \2/" + fi +} diff --git a/share/lbdb/munge-keeporder.awk.in b/share/lbdb/munge-keeporder.awk.in @@ -0,0 +1,41 @@ +#! @AWK@ -f +# +# -*-awk-*- +# +# Copyright (C) 1998-2000 Thomas Roessler <roessler@guug.de> +# 2000 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: munge-keeporder.awk.in,v 1.3 2005-10-29 14:48:11 roland Exp $ + +BEGIN { + FS = "\t"; + i = 0; +} + +{ + line[$1] = $0; + pos[$1] = i; + idx[i++] = $1; +} + +END { + for (j = 0; j < i; j++) { + if (pos[idx[j]] == j) { + print line[idx[j]]; + } + } +} diff --git a/share/lbdb/munge.awk.in b/share/lbdb/munge.awk.in @@ -0,0 +1,36 @@ +#! @AWK@ -f +# +# -*-awk-*- +# +# Copyright (C) 1998-2000 Thomas Roessler <roessler@guug.de> +# 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: munge.awk.in,v 1.7 2005-10-29 14:48:11 roland Exp $ + +BEGIN { + FS = "\t"; +} + +{ + line[$1] = $0; +} + +END { + for (a in line) { + print line[a]; + } +} diff --git a/share/lbdb/mutt_ldap_query.pl.in b/share/lbdb/mutt_ldap_query.pl.in @@ -0,0 +1,559 @@ +#! @PERL@ -w +# +# Copyright (C) 2000-2006 Marc de Courville <marc@courville.org> +# Copyright (C) 2005-2007 Roland Rosenfeld <roland@spinnaker.de> +# +# $Id: mutt_ldap_query.pl.in,v 1.28 2010-05-18 18:10:30 roland Exp $ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. + +use strict; +use Getopt::Long; +use Net::LDAP; +use Pod::Usage; + +#------8<------8<------8<------8<---cut here--->8------>8------>8------>8------ +# The defaults +my $man = 0; +my $help = 0; +my $DEBUG = 0; +my $lbdb_output = 0; +my $version = 0; +my $ldap_server_nickname = ''; +my $config_file = ''; + +# hostname of your ldap server +our $ldap_server = 'ldap.four11.com'; +# ldap base search +our $search_base = 'c=US'; +# list of the fields that will be used for the query +our $ldap_search_fields = 'givenname sn cn'; +# list of the fields that will be used for composing the answer +our $ldap_expected_answers = 'givenname sn mail o'; +# format of the email result based on the expected answers of the ldap query +our $ldap_result_email = '${mail}'; +# format of the realname result based on the expected answers of the ldap query +our $ldap_result_realname = '${givenname} ${sn}'; +# format of the comment result based on the expected answers of the ldap query +our $ldap_result_comment = '(${o})'; +# use ignorant (wildcard searching): +our $ignorant = 0; +# LDAP bind DN: +our $ldap_bind_dn = ''; +# LDAP bind password: +our $ldap_bind_password = ''; + +our %ldap_server_db = ( + 'four11' => ['ldap.four11.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ], + 'infospace' => ['ldap.infospace.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ], + 'whowhere' => ['ldap.whowhere.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ], + 'bigfoot' => ['ldap.bigfoot.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ], + 'switchboard' => ['ldap.switchboard.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ], + 'infospacebiz' => ['ldapbiz.infospace.com', 'c=US', 'givenname sn cn mail', 'givenname cn sn mail o', '${mail}', '${givenname} ${sn}', '${o}' ] +); +#------8<------8<------8<------8<---cut here--->8------>8------>8------>8------ + +# Return version string from CVS tag +sub versionstring { + my $ver = ' $Name: debian_version_0_38 $ '; + $ver =~ s/Name//g; + $ver =~ s/[:\$]//g; + $ver =~ s/\s+//g; + $ver =~ s/^v//g; + $ver =~ s/_/\./g; + if ($ver eq '') { + $ver = "devel"; + } + return($ver . " <marc\@courville.org>"); +} + +# Source a perl file +sub process_file { + foreach my $file (@_) { + if (-r $file) { + unless (my $return = do $file) { + warn "couldn't parse $file: $@" if $@; + warn "couldn't do $file: $!" unless defined $return; + warn "couldn't run $file" unless $return; + } + } +# else { +# warn "either $file doesn't exist or is not readable by me!\n"; +# } + } +} + +# first we need to apply defaults +process_file("@sysconfdir@/lbdb_ldap.rc", + "@sysconfdir@/mutt_ldap_query.rc", + "$ENV{HOME}/.lbdb/ldap.rc", + "$ENV{HOME}/.mutt_ldap_query.rc"); + + +# Parse command line options. They override system defaults. +GetOptions ( + 'config_file|c=s' => \$config_file, + 'server|ls=s' => \$ldap_server, + 'search_base|sb:s' => \$search_base, + 'search_fields|sf:s' => \$ldap_search_fields, + 'expected_answers|ea:s' => \$ldap_expected_answers, + 'format_email|fe:s' => \$ldap_result_email, + 'format_realname|fr:s' => \$ldap_result_realname, + 'format_comment|fc:s' => \$ldap_result_comment, + 'nickname|n=s' => \$ldap_server_nickname, + 'bind_dn|bd:s' => \$ldap_bind_dn, + 'bind_password|bp:s' => \$ldap_bind_password, + 'debug' => sub { $DEBUG = 1 }, + 'help|?|h' => \$help, + 'man|m' => \$man, + 'ignorant|i' => \$ignorant, + 'lbdb_output|l' => \$lbdb_output, + 'version|v' => \$version +); + +# +# print usage and help info before we process config files +# +pod2usage(1) if $help; +pod2usage(-verbose => 2) if $man; + +if ($version) { + print "mutt_ldap_query version " . &versionstring() . "\n"; + print '$Id: mutt_ldap_query.pl.in,v 1.28 2010-05-18 18:10:30 roland Exp $ ' . "\n"; + exit(0); +} + +# command-line config file take precedence over command-line options +if ($config_file) { + process_file($config_file); +} + + +# after we've done with GetOptions $ARGV[0] should present the rest +# (i.e. mandatory search pattern) +die pod2usage(1) if (! $ARGV[0] ); + +if ($ldap_server_nickname) { + my $option_array = $ldap_server_db{$ldap_server_nickname}; + die print "$0 unknown server nickname:\n\t no server associated to the nickname $ldap_server_nickname, please modify the internal database according your needs by editing the ressource file or specifying the relevant one to use\n" if ! $option_array; + $ldap_server = $option_array->[0]; + $search_base = $option_array->[1]; + $ldap_search_fields = $option_array->[2]; + $ldap_expected_answers = $option_array->[3]; + $ldap_result_email = $option_array->[4]; + $ldap_result_realname = $option_array->[5]; + $ldap_result_comment = $option_array->[6]; + if (defined($option_array->[7])) { + $ignorant = $option_array->[7]; + } + if (defined($option_array->[8])) { + $ldap_bind_dn = $option_array->[8]; + } + if (defined($option_array->[9])) { + $ldap_bind_password = $option_array->[9]; + } +} + +print "DEBUG: ldap_server='$ldap_server' search_base='$search_base' search_fields='$ldap_search_fields'\ + expected_answer='$ldap_expected_answers' format_email='$ldap_result_email' format_realname='$ldap_result_realname'\ + bind_dn='$ldap_bind_dn' bind_password='$ldap_bind_password'\n" if ($DEBUG); + +my @fields = split / /, $ldap_search_fields; +my @results; + +foreach my $askfor ( @ARGV ) { + my $query=""; + if ($ignorant) { +# enable this if you want to include wildcard in your search with some huge +# ldap databases you might want to avoid it + $query = join '', map { "($_=*$askfor*)" } @fields; + } + else { + $query = join '', map { "($_=$askfor)" } @fields; + } + $query = "(|" . $query . ")"; + + print "DEBUG: perl ldap module processing filter:\nDEBUG: $query\n" if ($DEBUG); + my $ldap = Net::LDAP->new($ldap_server, Debug => 3) or die $@; + if (defined($ldap_bind_dn) && $ldap_bind_dn ne '' + && defined($ldap_bind_password) && $ldap_bind_password ne '') { + $ldap->bind($ldap_bind_dn, password=> $ldap_bind_password); + } else { + $ldap->bind; + } + my $mesg = $ldap->search( base => $search_base, filter => $query ) or die $@; + if ($mesg->code && ($mesg->code ne '4')) { + die "Search failed. LDAP server returned an error : ", $mesg->code, ", description: ", $mesg->error; + } + my @entries = $mesg->entries; + map { $_->dump } $mesg->all_entries if ($DEBUG); + my $entry; + foreach $entry (@entries) { + print "DEBUG: processing $entry->dn\n" if ($DEBUG); +# prepare the results + my @emails = (); + my $realname = $ldap_result_realname; + my $comment = $ldap_result_comment; + foreach my $answer (split / /, $ldap_expected_answers) { + my $result = ''; +# if this is email we take all the values + if( $ldap_result_email =~ /\${$answer}/ ) { + foreach my $result ($entry->get_value($answer)) { + my $email = $ldap_result_email; + $email =~ s/\${$answer}/$result/g; + push @emails, $email; + } + } + else { + my $result = ''; +# if there is no answer must return the null otherwise we get an uninitialized variable error + ($result = $entry->get_value($answer)) || ($result = ''); +# replace the containers with the results of the query + $realname =~ s/\${$answer}/$result/g; + $comment =~ s/\${$answer}/$result/g; + } + } + foreach my $ema (@emails) { + push @results, "$ema\t$realname\t$comment\n"; + } + } + $ldap->unbind; +} + +if ($lbdb_output) { +# display results convenient for lbdb processing + print @results; +} +else { + print "LDAP query: found ", scalar(@results), "\n", @results; +} + +exit 1 if ! @results; + +__END__ + +=head1 NAME + +mutt_ldap_query - Query LDAP server for Mutt mail-reader + +=head1 SYNOPSIS + +mutt_ldap_query.pl [options] <name_to_query> [[<other_name_to_query>] ...] + +=head1 OPTIONS + +=over 8 + +=item B<--config=config_file> or B<-c config_file> + +specify an alternate resource file other than the system ones +(F<@sysconfdir@/lbdb_ldap.rc> or F<@sysconfdir@/mutt_ldap_query.rc>) +or default personal ones (F<$HOME/.lbdb/ldap.rc> or +F<$HOME/.mutt_ldap_query.rc>). + +=item B<--server=ldap_server> or B<-ls ldap_server> + +hostname of your ldap server. You can also use an ldap://foo[:port] +or ldaps://foo[:port] URL here to talk to different ports or SSL +encrypted servers. Or use ldapi://%2fvar%2flib%2fldap_sock to access an +ldap server via a socket (use %2f as as replacement for a slash in the file +name). + +=item B<--search_base=ldap_search_base> or B<-sb ldap_search_base> + +use <search_base> as the starting point for the search instead of the default. + +=item B<--search_fields=ldap_search_fields> or B<-sf ldap_search_fields> + +list of the fields on which the query will be performed. + +=item B<--expected_answers=ldap_expected_answers> or B<-ea ldap_expected_answers> + +list of the fields expected as the answer of the ldap server that will +be used for composing the output of the script. + +=item B<--format_email=result_format_email> or B<-fe result_format_email> + +format to be used for composing the email output result. It has to be +based on the expected ldap server answers and can use variable +containers of the form ${variable} where variable belongs to the +<ldap_expected_answers> set. + +=item B<--format_realname=result_format_realname> or B<-fr result_format_realname> + +format to be used for composing the realname output result. It has to +be based on the expected ldap server answers and can use variable +containers of the form ${variable} where variable belongs to the +<ldap_expected_answers> set. + +=item B<--format_comment=result_format_comment> or B<-fc result_format_comment> + +format to be used for composing the comment output result. It has to +be based on the expected ldap server answers and can use variable +containers of the form ${variable} where variable belongs to the +<ldap_expected_answers> set. + +=item B<--bind_dn=bind_distinguished_name> or B<-bd bind_distinguished_name> + +the destinguished name of the user who binds to the LDAP server. +Leave it empty for an anonmyous bind. + +=item B<--bind_password=secret> or B<-bp secret> + +the bind password for binding to the LDAP server. +Leave it empty for an anonmyous bind. + +=item B<--nickname=ldap_server_nickname> or B<-n ldap_server_nickname> + +shortcut for avoiding to use all the previous options by using the +script builtin or alternate config file table of common servers and +associated options. All the required parameters are then derived by +performing a <lbdb_server_nickname> lookup. + +=item B<--debug> or B<-d> + +turn on debugging messages. + +=item B<--help> or B<-?> or B<-h> or B<--man> or B<-m> + +generates this help message. + +=item B<--ignorant> or B<-i> + +ignorant mode: search using wildcard for *name_to_query* (requires a +longer processing from LDAP server but is quite convenient :). + +=item B<--lbdb_output> or B<-l> + +suppress number of matches output (suited for interfacing with little +brother database http://www.spinnaker.de/lbdb/). + +=item B<--version> or B<-v> + +show the version. + +=back + +=head1 DESCRIPTION + +B<mutt_ldap_query> performs ldap queries using either ldapsearch command +or the perl-ldap module and it outputs the required formatted data for +feeding mutt when using its "External Address Query" feature. + +The output of the script consists in 3 fields separated with tabs: the +email address, the name of the person and a comment. + +=head1 INTERFACING WITH MUTT + +This perl script can be interfaced with mutt by defining in your .muttrc: + + set query_command = "mutt_ldap_query.pl %s" + +Multiple requests are supported: the "Q" command of mutt accepts as argument +a list of queries (e.g. "Gosse de\ Courville"). + +Alternatively mutt_ldap_query can be interfaced with the more generic +little brother database query program (http://www.spinnaker.de/lbdb/) +using: + + set query_command = "lbdbq %s" + +and by specifying in your ~/.lbdb/lbdbrc file another method of query +just adding to the METHODS variable the m_ldap module e.g.: + + METHODS='m_inmail m_passwd m_ldap m_muttalias m_finger' + +and the right path to access m_ldap in MODULES_PATH, e.g. if you moved +F<m_ldap> in F<~/.lbdb/modules>: + + MODULES_PATH="/usr/local/lib $HOME/.lbdb/modules" + +Just make sure to use the correct path for calling mutt_ldap_query +in the m_ldap script. + +=head1 RESOURCE FILE FORMAT + +mutt_ldap_query is now fully customizable using an external resource +file. By default mutt_ldap_query parses the system definition file +located generally at F</etc/mutt_ldap_query.rc> or +F</usr/local/etc/mutt_ldap_query.rc> and also the user one: +F<$HOME/.mutt_ldap_query.rc>. + +Instead of using command line options, the user can redefine all the +variables using the resource file by two manners in order to match his +site configuration. A file example is provided below: + + # The format of each entry of the ldap server database is the following: + # LDAP_NICKNAME => ['LDAP_SERVER', + # 'LDAP_SEARCH_BASE', + # 'LDAP_SEARCH_FIELDS', + # 'LDAP_EXPECTED_ANSWERS', + # 'LDAP_RESULT_EMAIL', + # 'LDAP_RESULT_REALNAME', + # 'LDAP_RESULT_COMMENT'], + + # a practical illustrating example being: + # debian => ['db.debian.org', + # 'ou=users,dc=debian,dc=org', + # 'uid cn sn ircnick', + # 'uid cn sn ircnick', + # '${uid}@debian.org', + # '${cn} ${sn}', + # '${ircnick}'], + # the output of the query will be then: + # ${uid}@debian.org\t${cn} ${sn}\t${ircnick} (i.e.: email name comment) + + # warning this database will erase default script builtin + %ldap_server_db = ( + 'four11' => ['ldap.four11.com', + 'c=US', + 'givenname sn cn mail', + 'givenname cn sn mail o', + '${mail}', + '${givenname} ${sn}', + '${o}' ], + 'infospace' => ['ldap.infospace.com', + 'c=US', + 'givenname sn cn mail', + 'givenname cn sn mail o', + '${mail}', + '${givenname} ${sn}', + '${o}' ], + 'whowhere' => ['ldap.whowhere.com', + 'c=US', + 'givenname sn cn mail', + 'givenname cn sn mail o', + '${mail}', + '${givenname} ${sn}', + '${o}' ], + 'bigfoot' => ['ldap.bigfoot.com', + 'c=US', + 'givenname sn cn mail' + , 'givenname cn sn mail o' + , '${mail}' + , '${givenname} ${sn}', + '${o}' ], + 'switchboard' => ['ldap.switchboard.com', + 'c=US', + 'givenname sn cn mail' + , 'givenname cn sn mail o', + '${mail}', + '${givenname} ${sn}', + '${o}' ], + 'infospacebiz' => ['ldapbiz.infospace.com', + 'c=US', + 'givenname sn cn mail', + 'givenname cn sn mail o', + '${mail}', + '${givenname} ${sn}', + '${o}' ], + ); + + # hostname of your ldap server + $ldap_server = 'ldap.four11.com'; + # ldap base search + $search_base = 'c=US'; + # list of the fields that will be used for the query + $ldap_search_fields = 'givenname sn cn mail'; + # list of the fields that will be used for composing the answer + $ldap_expected_answers = 'givenname sn cn mail o'; + # format of the email result based on the expected answers of the ldap query + $ldap_result_email = '${mail}'; + # format of the realname result based on the expected answers of the ldap query + $ldap_result_realname = '${givenname} ${sn}'; + # format of the comment result based on the expected answers of the ldap query + $ldap_result_comment = '(${o})'; + +=head1 EXAMPLES OF QUERIES + + mutt_ldap_query.pl --ldap_server='ldap.mot.com' \ + --search_base='ou=employees, o=Motorola,c=US' \ + --ldap_search_fields='commonName gn sn cn uid' \ + --ldap_expected_answers='gn sn preferredRfc822Recipient ou c telephonenumber' \ + --ldap_result_email='${preferredRfc822Recipient}' \ + --ldap_result_realname='${gn} ${sn}' \ + --ldap_result_comment='(${telephonenumber}) ${ou} ${c}' \ + Gosse de\ Courville + +performs a query using the ldap server ldap.mot.com using +the following searching base 'ou=employees, o=Motorola,c=US' and +performing a search on the fields 'commonName gn sn cn uid' for 'Gosse' +and then "de Courville" looking for the following answers 'gn sn +preferredRfc822Recipient ou c telephonenumber'. Based on this answers, +mutt_ldap_query will return a list of entries identified of the form: + + <${preferredRfc822Recipient}>\t${gn} ${sn}\t(${telephonenumber}) ${ou} ${c} + +where ${} variables should be considered as containers that are +replaced by the results of the query. The previous query can be +greatly simplified by using the ldap server mini database feature of +the resource file introducing for example a nickname. + + mutt_ldap_query.pl --ldap_server_nickname='motorola' Gosse de\ Courville + +When not sure of the full name (i.e. it should contain Courville) +the ignorant mode is useful since the query will be performed using +wildcards, i.e. *Courville* in the following case: + + mutt_ldap_query.pl --ignorant Courville + +=head1 WHERE TO GET IT + +The latest version can be retrieved at + ftp://ftp.mutt.org/pub/mutt/contrib +or + http://www.courville.org/ + +Note that now the script is integrated in the latest version of the little brother database available at http://www.spinnaker.de/lbdb/. It is thus easier to use through this standard package than to hand customize it to fit your system/distribution needs. + +=head1 REFERENCES + +=over 2 + +=item - + +perl-ldap module + http://perl-ldap.sourceforge.net/ + +=item - + +mutt is the ultimate email client + http://www.mutt.org/ + +=item - + +historical Brandon Blong's "External Address Query" feature patch for mutt + http://www.fiction.net/blong/programs/mutt/#query + +=item - + +little brother database is an interface query program for mutt that allow +multiple searches for email addresses based on external query scripts +just like this one 8-) + http://www.spinnaker.de/lbdb/ + +=back + +=head1 AUTHORS + +Marc de Courville <marc@courville.org> and the various other contributors... that kindly sent their patches. + +Please report any bugs, or post any suggestions, to <marc@courville.org>. + +=head1 COPYRIGHT + +Copyright (c) 1998-2003 Marc de Courville <marc@courville.org>. All rights reserved. This program is free software; you can redistribute it and/or modify it under the GNU General Public License (GPL). See http://www.opensource.org/gpl-license.html and http://www.opensource.org/. + +=cut diff --git a/share/lbdb/nodelist2lbdb.man.in b/share/lbdb/nodelist2lbdb.man.in @@ -0,0 +1,44 @@ +.\" -*-nroff-*- +.\" Copyright (c) 1999-2005 Roland Rosenfeld <roland@debian.org> +.\" +.\" This manual page is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This program is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program; if not, write to the Free Software Foundation, +.\" Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +.\" +.TH NODELIST2LBDB 1 "October 2005" Unix "User Manuals" +.SH NAME +nodelist2lbdb \- convert Fido nodelist and pointlist to lbdb format +.SH SYNOPSIS +.B nodelist2lbdb +.BI nodelist. XXX +.BI [point24. XXX ] +.SH DESCRIPTION +This little script reads in a Fido named +.BI nodelist. XXX +and optionally a Fido point list named +.BI points24. YYY +and generates a list with the lbdb format: +.nf + <mailaddress> TAB <realname> TAB <comment> +.fi +This file is written to +.I $HOME/.lbdb/nodelist +.SH FILES +.I $HOME/.lbdb/nodelist +.br +.I @libdir@/m_fido +.SH "SEE ALSO" +.BR lbdbq (1) +.SH AUTHORS +.B nodelist2lbdb +is written by Roland Rosenfeld <roland@spinnaker.de>. diff --git a/share/lbdb/nodelist2lbdb.pl.in b/share/lbdb/nodelist2lbdb.pl.in @@ -0,0 +1,124 @@ +#! @PERL@ +# +# -*-perl-*- +# +# $Id: nodelist2lbdb.pl.in,v 1.3 2005-10-29 14:48:11 roland Exp $ +# +# This little script reads Fido nodelist.XXX (and points24.YYY) in and +# generates a list with the following format from it: +# <mailaddress> TAB <realname> TAB <comment> +# To reduce the size of the generated list, only Region 24 of the +# nodelist is used. +# +# The generated list can be used in combination of Thomas Roessler's +# lbdb for the Mutt mailreader. +# +########################################################################## +# +# Copyright (C) 1998-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +########################################################################## + +$database="$ENV{HOME}/.lbdb/nodelist"; + +if (@ARGV == 0 || @ARGV >2 + || !($ARGV[0] =~ /nodelist\.\d\d\d$/i) + || ((@ARGV == 2) && !($ARGV[1] =~ /points24\.\d\d\d$/i ))) { + die "Usage: $0 nodelist.XXX [points24.YYY]\n"; +} + +open (DB, ">$database") || die "Cannot open $database for writing"; + +# +# Process Nodelist: +# + +$zone=2; +$net=0; +$node=0; + +open (NODELIST, "<$ARGV[0]") || die "Cannot open $ARGV[0]"; +while (<NODELIST>) { + next if /^;/; + ($special,$number,$bbs,$city,$name) = split(/,/); + + if ($special =~ /Zone/) { + $zone=$number; + $net=$number; + $node=0; + } elsif ($special =~ /Region/) { + $net=$number; + $node=0; + } elsif ($special =~ /Host/) { + $net=$number; + $node=0; + } elsif ($special =~ /Down|Hold/) { + next; + } else { + $node = $number; + } + + $address = "$name\@f$node.n$net.z$zone.fidonet.org"; + $name =~ s/_/ /g; + $bbs =~ s/_/ /g; + + # + # Restrict to Region 24: + # +# if ($zone =~ /^2$/ && $net =~ /^24/ ) { + print DB "$address\t$name\t$bbs\n"; +# } +} +close NODELIST; + + +# +# Process Pointlist: +# + +$zone=2; +$net=0; +$node=0; +$point=0; + +open (POINTLIST, "<$ARGV[1]") || die "Cannot open $ARGV[1]"; +while (<POINTLIST>) { + next if /^;/; + ($special,$number,$bbs,$city,$name) = split(/,/); + + if ($special =~ /Region/) { + next; + } elsif ($special =~ /Host/) { + ($net,$node) = split(/\//, $bbs); + next; + } elsif ($special =~ /Down|Hold/) { + next; + } else { + $point = $number; + } + + $address = "$name\@p$point.f$node.n$net.z$zone.fidonet.org"; + $name =~ s/_/ /g; + $city =~ s/_/ /g; + + print DB "$address\t$name\t$city\n"; + +} +close NODELIST; + + +close DB; diff --git a/share/lbdb/palm_lsaddr.pl.in b/share/lbdb/palm_lsaddr.pl.in @@ -0,0 +1,63 @@ +#! @PERL@ +# +# palm_lsaddr - Palm address database helper utility for lbdb +# Copyright (C) 2000 Dave Pearson <davep@davep.org> +# (C) 2003 Nikolaus Rath <Nikolaus@rath.org> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. + +use Palm::PDB; +use Palm::Address; + +if ( $#ARGV > -1 ) +{ + my $pdb = new Palm::PDB; + + if ( $pdb ) + { + $pdb->Load( $ARGV[ 0 ] ); + + my $record; + + for ( $i = 0, $record = $pdb->{records}[ $i ]; $record; $i++, $record = $pdb->{records}[ $i ] ) + { + my $name = $record->{fields}{firstName} . " " . $record->{fields}{name}; + + # Remove leading and trailing whitespace. + $name =~ s/\s+$//; + $name =~ s/^\s+//; + + # If the name is empty, use the company name instead. + $name = $record->{fields}{company} unless ( length( $name ) > 0 ); + + if ( length( $name ) > 0 ) + { + my $entry; + + # Find fields containing e-mail addresses + for($entry=1; $entry <= 5; $entry++) + { + # 0 = Work, 1 = Home, 2 = Fax, 3 = Other, 4 = email, + # 5 = Main, 6 = Pager, 7 = Mobile + if($record->{phoneLabel}{"phone${entry}"} == 4) { + # A field can also contain multiple lines. + print map "$_\t$name\t(Palm)\n", + split(/\n/, $record->{fields}{"phone${entry}"}); + } + } + } + } + } +} diff --git a/share/lbdb/tac.awk.in b/share/lbdb/tac.awk.in @@ -0,0 +1,37 @@ +#! @AWK@ -f +# +# -*-awk-*- +# +# Copyright (C) 2000-2005 Roland Rosenfeld <roland@spinnaker.de> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301,, USA. +# +# $Id: tac.awk.in,v 1.3 2005-10-29 14:48:11 roland Exp $ +# +# Output file in reverse order + +BEGIN { + i = 0; +} + +{ + line[i++] = $0; +} + +END { + for (i-- ; i>=0; i--) { + print line[i]; + } +}