diff --git a/gestion/whos_lc.py b/gestion/whos_lc.py index 655b9fcb..2ca47b28 100755 --- a/gestion/whos_lc.py +++ b/gestion/whos_lc.py @@ -33,6 +33,9 @@ def explore_db(args): dataLen = sum([len(elem) for elem in data.itervalues()]) if dataLen: for (key, elem) in data.iteritems(): + if len(elem) == 0: + continue + _header = affichage.style(u"Résultats de type %s trouvés dans la base." % (key,), ['cyan']) print _header.encode(ENCODING) if len(elem) == 1: @@ -58,6 +61,8 @@ def search_ldap(args): if args.macro_filtre: search_filter = filter_macro(search_filter) + elif args.wild: + search_filter = wild_search_filter(search_filter) try: resultats = LDAP.search(search_filter, sizelimit=args.limite) @@ -119,6 +124,23 @@ def filter_macro(filtre): return filtre +def wild_search_filter(filtre): + """Recherche sur un gros volume d'attributs dans la base de données""" + + kw = filtre[1:-1] + + attr_list = [ + u'nom', u'prenom', u'tel', u'mail', u'chbre', u'mailAlias', u'canonicalAlias', u'mailExt', u'uid', + u'macAddress', u'host', u'hostAlias', u'ipHostNumber', u'ip6HostNumber', + ] + + filtre = u"(|" + for elem in attr_list: + filtre += u"(%s=%s*)" % (elem, kw) + filtre += u")" + + return filtre + def limits(data, args): """Applique les limitations dans la recherche. Les cas sont a priori conflictuels. @@ -172,7 +194,6 @@ if __name__ == "__main__": parser = argparse.ArgumentParser(description="Recherche dans la base des adhérents", add_help=False) parser.add_argument('-A', '--adresse', help="Affiche l'adresse de l'adhérent.", action="store_true") parser.add_argument('-d', '--blacklist', type=int, help="Choix du nombre d'entrées blacklist à afficher pour les entrées détaillées.", action="store", default=10) - parser.add_argument('-f', '--macro_filtre', help="Flag activant la gestion des macros pour le filtre LDAP.", action="store_true") parser.add_argument('-h', '--help', help="Affiche ce message et quitte.", action="store_true") parser.add_argument('-i', '--ipsec', help="Affichage de la clef wifi de la machine.", action="store_true") parser.add_argument('-l', '--limite', type=int, help="Modifier la taille limite de recherche dans la base LDAP", action="store", default=1000) @@ -184,6 +205,10 @@ if __name__ == "__main__": 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") + macro_group = parser.add_mutually_exclusive_group(required=False) + macro_group.add_argument('-f', '--macro_filtre', help="Flag activant la gestion des macros pour le filtre LDAP.", action="store_true") + macro_group.add_argument('-w', '--wild', help="Cherche de façon agressive dans la base de données à partir du filtre", action="store_true") + type_group = parser.add_mutually_exclusive_group(required=False) type_group.add_argument('-a', '--adherent', help="Limite l'affichage aux adhérents.", action="store_true") type_group.add_argument('--adm', help="Limite l'affichage aux machines adm.", action="store_true")