Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 26 additions & 12 deletions mutt_ldap.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

"LDAP address searches for Mutt"

import argparse as _argparse
import codecs as _codecs
import ConfigParser as _configparser
import hashlib as _hashlib
Expand Down Expand Up @@ -50,10 +51,13 @@


class Config (_configparser.SafeConfigParser):
def load(self):
config_paths = self._get_config_paths()
def load(self, config_path=None):
config_paths = config_path and [ config_path ] or self._get_config_paths()
LOG.info(u'load configuration from {0}'.format(config_paths))
read_config_paths = self.read(config_paths)
if not read_config_paths:
LOG.error(u'Loading configuration file failed: {0}'.format(' '.join(config_paths)))
_sys.exit(1)
self._setup_defaults()
LOG.info(u'loaded configuration from {0}'.format(read_config_paths))

Expand Down Expand Up @@ -141,6 +145,7 @@ def _log_xdg_import_error(self):
CONFIG.set('auth', 'user', '')
CONFIG.set('auth', 'password', '')
CONFIG.set('auth', 'gssapi', 'no')
CONFIG.set('auth', 'keyring', 'no')
CONFIG.add_section('query')
CONFIG.set('query', 'filter', '') # only match entries according to this filter
CONFIG.set('query', 'search-fields', 'cn displayName uid mail') # fields to wildcard search
Expand Down Expand Up @@ -195,10 +200,15 @@ def connect(self):
sasl = _ldap_sasl.gssapi()
self.connection.sasl_interactive_bind_s('', sasl)
else:
self.connection.bind(
self.config.get('auth', 'user'),
self.config.get('auth', 'password'),
_ldap.AUTH_SIMPLE)
user = self.config.get('auth', 'user')

if self.config.getboolean('auth', 'keyring'):
import keyring
password = keyring.get_password('mutt-ldap', user)
else:
password = self.config.get('auth', 'password')

self.connection.bind(user, password, _ldap.AUTH_SIMPLE)

def unbind(self):
if self.connection is None:
Expand Down Expand Up @@ -354,15 +364,19 @@ def format_entry(entry):
# Describes the format mutt expects: address\tname
yield u'\t'.join(format_columns(m, data))

def parse_args():
arg_parser = _argparse.ArgumentParser()
arg_parser.add_argument('--config','-c',help='path to configuration file',metavar='path',dest='config')
arg_parser.add_argument('query', nargs='+', help='search string')

return arg_parser.parse_args()

if __name__ == '__main__':
CONFIG.load()

if len(_sys.argv) < 2:
LOG.error(u'{0}: no search string given'.format(_sys.argv[0]))
_sys.exit(1)
if __name__ == '__main__':
args = parse_args()
CONFIG.load(args.config)

query = u' '.join(_sys.argv[1:])
query = u' '.join(args.query)

connection_class = CONFIG.get_connection_class()
addresses = []
Expand Down