diff --git a/gestion/whos_lc.py b/gestion/whos_lc.py index 059c7f91..241e0973 100755 --- a/gestion/whos_lc.py +++ b/gestion/whos_lc.py @@ -13,17 +13,11 @@ import lc_ldap.shortcuts import lc_ldap.objets import lc_ldap.filter2 as lfilter import lc_ldap.crans_utils -# To be developed -#import gestion.logger.Logger as Logger -ldap = lc_ldap.shortcuts.lc_ldap_readonly() - -encoding = "utf-8" +ENCODING = "utf-8" def explore_db(args): - """ - Utilise le contenu de args pour décider comment explorer la base de données. - """ + """Utilise le contenu de args pour décider comment explorer la base de données.""" data = search_ldap(args) data = limits(data, args) dataLen = sum([len(elem) for elem in data.itervalues()]) @@ -32,40 +26,34 @@ def explore_db(args): if len(elem) == 1: elem[0].display(historique=args.historique, blacklist=args.blacklist) else: - print lc_ldap.printing.sprint_list(elem).encode(encoding) + print lc_ldap.printing.sprint_list(elem).encode(ENCODING) print "%s résultats" % len(elem) def search_ldap(args): - """ - Cherche et trie - """ + """Cherche et trie""" data = {} if args.ldap: - try: - resultats = ldap.search(args.filtre.decode(encoding), sizelimit=args.limit) - except SIZELIMIT_EXCEEDED: - raise EnvironmentError("La limite de résultats LDAP (%s) a été dépassée. Vous pouvez l'augmenter avec l'option -l" % (args.limit,)) - for elem in resultats: - if not data.has_key(elem.__class__.__name__): - data[elem.__class__.__name__] = [elem] - else: - data[elem.__class__.__name__].append(elem) + search_filter = args.filtre.decode(ENCODING) else: - try: - resultats = ldap.search(lfilter.human_to_ldap(args.filtre.decode(encoding)), sizelimit=args.limit) - except SIZELIMIT_EXCEEDED: - raise EnvironmentError("La limite de résultats LDAP (%s) a été dépassée. Vous pouvez l'augmenter avec l'option -l" % (args.limit,)) - for elem in resultats: - if not data.has_key(elem.__class__.__name__): - data[elem.__class__.__name__] = [elem] - else: - data[elem.__class__.__name__].append(elem) + search_filter = lfilter.human_to_ldap(args.filtre.decode(ENCODING)) + + try: + resultats = LDAP.search(search_filter, sizelimit=args.limit) + except SIZELIMIT_EXCEEDED: + raise EnvironmentError("La limite de résultats LDAP (%s) a été dépassée. Vous pouvez l'augmenter avec l'option -l" % (args.limit,)) + + for elem in resultats: + if not data.has_key(elem.__class__.__name__): + data[elem.__class__.__name__] = [elem] + else: + data[elem.__class__.__name__].append(elem) + return data def limits(data, args): - """ - Applique les limitations dans la recherche. + """Applique les limitations dans la recherche. Les cas sont a priori conflictuels. + """ data_restricted = {} data_restricted.update(data) @@ -104,8 +92,10 @@ def limits(data, args): if lc_ldap.crans_utils.find_rid_plage(machine['rid'][0].value)[0].startswith('serveur'): out.append(machine) data_restricted = {'machineCrans' : out,} + if contentFilter: data_restricted = {a: data.get(a, []) for a in contentFilter} + return data_restricted if __name__ == "__main__": @@ -119,6 +109,7 @@ if __name__ == "__main__": parser.add_argument('-L', '--historique', type=int, help="Choix du nombre d'entrées d'historique à afficher pour les entrées détaillées.", action="store", default=10) parser.add_argument('-s', '--sshfp', help="Affiche les fingerprint SSH si elles existent.", action="store_true") parser.add_argument('-t', '--ldap', help="Utiliser les filtres tels que définis dans ldap", action="store_true") + parser.add_argument('--test', help="Se connecter à la base de test", action="store_true") parser.add_argument('-v', '--verbose', help="Rend le script (très) verbeux.", action="store_true") parser.add_argument('filtre', type=str, nargs="?", help="Le filtre whos à utiliser") @@ -138,6 +129,9 @@ if __name__ == "__main__": if args.help: parser.print_help() sys.exit(0) + if args.test: + LDAP = lc_ldap.shortcuts.lc_ldap_test() else: - #logger = Logger() - explore_db(args) + LDAP = lc_ldap.shortcuts.lc_ldap_readonly() + + explore_db(args)