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 => [EMAIL PROTECTED],
                            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

Reply via email to