Un peu de ménage, et ajout d'une option pour whoser dans la base de test

This commit is contained in:
Pierre-Elliott Bécue 2015-04-13 02:24:54 +02:00
parent d6bb56dfaa
commit bf98167a63

View file

@ -13,17 +13,11 @@ import lc_ldap.shortcuts
import lc_ldap.objets import lc_ldap.objets
import lc_ldap.filter2 as lfilter import lc_ldap.filter2 as lfilter
import lc_ldap.crans_utils 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): 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 = search_ldap(args)
data = limits(data, args) data = limits(data, args)
dataLen = sum([len(elem) for elem in data.itervalues()]) dataLen = sum([len(elem) for elem in data.itervalues()])
@ -32,40 +26,34 @@ def explore_db(args):
if len(elem) == 1: if len(elem) == 1:
elem[0].display(historique=args.historique, blacklist=args.blacklist) elem[0].display(historique=args.historique, blacklist=args.blacklist)
else: 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) print "%s résultats" % len(elem)
def search_ldap(args): def search_ldap(args):
""" """Cherche et trie"""
Cherche et trie
"""
data = {} data = {}
if args.ldap: if args.ldap:
try: search_filter = args.filtre.decode(ENCODING)
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)
else: else:
try: search_filter = lfilter.human_to_ldap(args.filtre.decode(ENCODING))
resultats = ldap.search(lfilter.human_to_ldap(args.filtre.decode(encoding)), sizelimit=args.limit)
except SIZELIMIT_EXCEEDED: try:
raise EnvironmentError("La limite de résultats LDAP (%s) a été dépassée. Vous pouvez l'augmenter avec l'option -l" % (args.limit,)) resultats = LDAP.search(search_filter, sizelimit=args.limit)
for elem in resultats: except SIZELIMIT_EXCEEDED:
if not data.has_key(elem.__class__.__name__): raise EnvironmentError("La limite de résultats LDAP (%s) a été dépassée. Vous pouvez l'augmenter avec l'option -l" % (args.limit,))
data[elem.__class__.__name__] = [elem]
else: for elem in resultats:
data[elem.__class__.__name__].append(elem) if not data.has_key(elem.__class__.__name__):
data[elem.__class__.__name__] = [elem]
else:
data[elem.__class__.__name__].append(elem)
return data return data
def limits(data, args): def limits(data, args):
""" """Applique les limitations dans la recherche.
Applique les limitations dans la recherche.
Les cas sont a priori conflictuels. Les cas sont a priori conflictuels.
""" """
data_restricted = {} data_restricted = {}
data_restricted.update(data) 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'): if lc_ldap.crans_utils.find_rid_plage(machine['rid'][0].value)[0].startswith('serveur'):
out.append(machine) out.append(machine)
data_restricted = {'machineCrans' : out,} data_restricted = {'machineCrans' : out,}
if contentFilter: if contentFilter:
data_restricted = {a: data.get(a, []) for a in contentFilter} data_restricted = {a: data.get(a, []) for a in contentFilter}
return data_restricted return data_restricted
if __name__ == "__main__": 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('-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('-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('-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('-v', '--verbose', help="Rend le script (très) verbeux.", action="store_true")
parser.add_argument('filtre', type=str, nargs="?", help="Le filtre whos à utiliser") parser.add_argument('filtre', type=str, nargs="?", help="Le filtre whos à utiliser")
@ -138,6 +129,9 @@ if __name__ == "__main__":
if args.help: if args.help:
parser.print_help() parser.print_help()
sys.exit(0) sys.exit(0)
if args.test:
LDAP = lc_ldap.shortcuts.lc_ldap_test()
else: else:
#logger = Logger() LDAP = lc_ldap.shortcuts.lc_ldap_readonly()
explore_db(args)
explore_db(args)