#!/usr/bin/python import sys import os import csv import ldap def dictize_line(header, line,): line_dict = {} for key, elem in zip(header, line, ): line_dict[key]=elem return line_dict def undictize_line(headers, dct, ): line = [] for col in headers: line.append(dct[col]) return line def get_ldap_data(lastname, fields): con = ldap.open('ldap.mit.edu') con.simple_bind_s("", "") dn = "dc=mit,dc=edu" result = con.search_s('dc=mit,dc=edu', ldap.SCOPE_SUBTREE, '(&(sn=%s)(uid=*))'%lastname, fields) if len(result) > 1: sys.stderr.write("WARNING: More than one result returned for %s\n" % lastname) if len(result) < 1: sys.stderr.write("WARNING: No results returned for %s\n" % lastname) ret = [] for person in result: retelem = {} for key in person[1]: retelem[key] = person[1][key][0] ret.append(retelem) return ret if __name__ == '__main__': indb = sys.stdin outdb = sys.stdout reader = csv.reader(indb, ) writer = csv.writer(outdb, ) header = reader.next() for line in reader: line_dict = dictize_line(header, line) try: new_lines = get_ldap_data(line_dict['Last'], ['cn', 'sn', 'givenName', 'uid', ]) except ldap.SIZELIMIT_EXCEEDED, e: pass for new_line in new_lines: writer.writerow(line + undictize_line(['uid', 'cn', ], new_line))