On Tue, Feb 12, 2008 at 01:43:25AM +0100, Nathan Huesken wrote: > Hi, > > I am using mutt from different computers (like my laptop and the desktop PC > at home) and I am wondering if there is some way to always keep my address > book synchronized between the two computers. > The coolest solution would be, if I could install some sort of database on my > vServer and make mutt query it everytime I need the address book (and also > add new addresses to it). > > Is there some sort if solution for this kind of think? > > Thanks! > Nathan Hello, I currently use ldap for an address book with mutt, I thought I would send you the scripts I use todo with what you will. I have added the following lines to my .muttrc ... ## ldap search set query_command="~/mutt-ldap-search.pl '%s'" ## adding addresses to ldap macro index,pager a '<shell-escape>/home/matt/bin/add2ldap<enter>' Allowing me to search and also add addresses by pressing a The mutt search perl script I found online somewhere, I did make a change to it allowing me to have entries without surnames, I just put surnames as '.' in this case. and the add2ldap is a bash script I just chucked together, there prob a better way of writing it but it works :) hth, Matt. -- Matt Richards
#!/bin/bash echo Adding a new address to the LDAP database ... if [ -z $1 ]; then echo I need an email address: read email else email=$1 fi if [ -z $email ]; then echo I really do need an email address! exit fi if [ -z $2 ]; then echo I need a First Name: read fname else fname=$2 fi if [ -z $3 ]; then echo I need a Second Name: read sname if [ -z $sname ]; then echo Using . for second name sname=. fi else sname=$3 fi echo "dn: mail=$email,ou=Contacts,o=mattstone cn: $fname $sname sn: $sname givenName: $fname mail: $email objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: organizationalPerson" | ldapadd -h 192.168.4.6 -D "uid=matt,ou=People,o=mattstone" -x -w "--PASSWD--"
#!/usr/bin/perl # use strict; use Net::LDAP; use constant HOST => '192.168.4.6'; use constant BASE => 'ou=Contacts, o=mattstone'; use constant VERSION => 3; use constant SCOPE => 'sub'; my $name; my @attributes = qw( dn givenName sn mail ); { print "Searching directory... "; $name = shift || die; my $filter = "(|(sn=$name*)(givenName=$name*))"; my $ldap = Net::LDAP->new( HOST, onerror => 'die' ) || die "Cannot connect: $@"; # $ldap->bind(version => VERSION) or die "Cannot bind: $@"; $ldap->bind( "uid=matt,ou=People,o=mattstone", password => "--PASSWD--" ) or die "Cannot bind: $@"; my $result = $ldap->search( base => BASE, scope => SCOPE, attrs => \@attributes, filter => $filter ); my @entries = $result->entries; $ldap->unbind(); print scalar @entries, " entries found.\n"; foreach my $entry ( @entries ) { my @emailAddr = $entry->get_value('mail'); foreach my $addr (@emailAddr) { print $addr , "\t"; if ($entry->get_value('sn') eq '.') { print $entry->get_value('givenName'), "\n"; } else { print $entry->get_value('givenName'), " "; print $entry->get_value('sn'), "\n"; } } } }
Attachment:
signature.asc
Description: Digital signature