[whos_lc] Script plus complet.
This commit is contained in:
parent
1eb39752d8
commit
2a069d17d3
1 changed files with 139 additions and 18 deletions
|
@ -1,22 +1,143 @@
|
||||||
#!/bin/bash /usr/scripts/python.sh
|
#!/bin/bash /usr/scripts/python.sh
|
||||||
# -*- mode: python; coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import sys
|
#
|
||||||
from affich_tools import coul, prompt
|
# Auteur : Pierre-Elliott Bécue <becue@crans.org>
|
||||||
import lc_ldap.shortcuts
|
# Licence : GPLv3
|
||||||
import lc_ldap.printing
|
# Date : 01/09/2014
|
||||||
import lc_ldap.filter2 as filter
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
import sys
|
||||||
if len(sys.argv) >1:
|
import argparse
|
||||||
conn=lc_ldap.shortcuts.lc_ldap_admin()
|
from ldap import SIZELIMIT_EXCEEDED
|
||||||
result=conn.search(filter.human_to_ldap(sys.argv[1].decode('utf-8')), sizelimit=4000)
|
|
||||||
if not result:
|
import lc_ldap.shortcuts
|
||||||
print "rien trouvé"
|
import lc_ldap.objets
|
||||||
else:
|
import lc_ldap.filter2 as lfilter
|
||||||
if len(result) == 1:
|
import lc_ldap.crans_utils
|
||||||
result[0].display()
|
# To be developed
|
||||||
|
#import gestion.logger.Logger as Logger
|
||||||
|
|
||||||
|
ldap = lc_ldap.shortcuts.lc_ldap_readonly()
|
||||||
|
|
||||||
|
encoding = "utf-8"
|
||||||
|
|
||||||
|
def explore_db(args):
|
||||||
|
"""
|
||||||
|
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()])
|
||||||
|
if dataLen:
|
||||||
|
for elem in data.itervalues():
|
||||||
|
if len(elem) == 1:
|
||||||
|
elem[0].display()
|
||||||
else:
|
else:
|
||||||
print lc_ldap.printing.sprint_list(result)
|
print lc_ldap.printing.sprint_list(elem)
|
||||||
print "%s résultats" % len(result)
|
print "%s résultats" % len(elem)
|
||||||
|
|
||||||
|
def search_ldap(args):
|
||||||
|
"""
|
||||||
|
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)
|
||||||
else:
|
else:
|
||||||
sys.stderr.write("Usage: %s {filtre}" % sys.argv[0])
|
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)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def limits(data, args):
|
||||||
|
"""
|
||||||
|
Applique les limitations dans la recherche.
|
||||||
|
Les cas sont a priori conflictuels.
|
||||||
|
"""
|
||||||
|
data_restricted = {}
|
||||||
|
data_restricted.update(data)
|
||||||
|
contentFilter = []
|
||||||
|
if args.adherent:
|
||||||
|
contentFilter = ["adherent"]
|
||||||
|
elif args.club:
|
||||||
|
contentFilter = ["club"]
|
||||||
|
elif args.machine:
|
||||||
|
contentFilter = ["machineFixe", "machineWifi", "machineCrans", "switchCrans", "borneWifi"]
|
||||||
|
elif args.crans:
|
||||||
|
contentFilter = ["machineCrans", "switchCrans", "borneWifi"]
|
||||||
|
elif args.switch:
|
||||||
|
contentFilter = ["switchCrans"]
|
||||||
|
elif args.borne:
|
||||||
|
contentFilter = ["borneWifi"]
|
||||||
|
# Special cases.
|
||||||
|
elif args.adm:
|
||||||
|
contentFilter = []
|
||||||
|
out = []
|
||||||
|
for machine in data.get('machineCrans', []):
|
||||||
|
if lc_ldap.crans_utils.find_rid_plage(machine['rid'][0].value)[0].startswith('adm'):
|
||||||
|
out.append(machine)
|
||||||
|
data_restricted = {'machineCrans' : out,}
|
||||||
|
elif args.special:
|
||||||
|
contentFilter = []
|
||||||
|
out = []
|
||||||
|
for machine in data.get('machineCrans', []):
|
||||||
|
if lc_ldap.crans_utils.find_rid_plage(machine['rid'][0].value)[0].startswith('special'):
|
||||||
|
out.append(machine)
|
||||||
|
data_restricted = {'machineCrans' : out,}
|
||||||
|
elif args.serveur:
|
||||||
|
contentFilter = []
|
||||||
|
out = []
|
||||||
|
for machine in data.get('machineCrans', []):
|
||||||
|
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__":
|
||||||
|
parser = argparse.ArgumentParser(description="Recherche dans la base des adhérents", add_help=False)
|
||||||
|
parser.add_argument('-6', '--ipv6', help="Affiche les ipv6.", action="store_true")
|
||||||
|
parser.add_argument('-a', '--adherent', help="Limite l'affichage aux adhérents.", action="store_true")
|
||||||
|
parser.add_argument('--adm', help="Limite l'affichage aux machines adm.", action="store_true")
|
||||||
|
parser.add_argument('-A', '--adresse', help="Affiche l'adresse de l'adhérent.", action="store_true")
|
||||||
|
parser.add_argument('-b', '--borne', help="Limite l'affichage aux bornes.", action="store_true")
|
||||||
|
parser.add_argument('-c', '--club', help="Limite l'affichage aux clubs.", 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=0)
|
||||||
|
parser.add_argument('--crans', help="Limite l'affichage aux machines crans.", 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', '--limit', type=int, help="Modifier la taille limite de recherche dans la base LDAP", action="store", default=1000)
|
||||||
|
parser.add_argument('-L', '--limit-historique', type=int, help="Choix du nombre d'entrées d'historique à afficher pour les entrées détaillées.", action="store", default=0)
|
||||||
|
parser.add_argument('-m', '--machine', help="Limite l'affichage aux machines.", action="store_true")
|
||||||
|
parser.add_argument('--serveur', help="Limite l'affichage aux serveurs.", action="store_true")
|
||||||
|
parser.add_argument('--special', help="Limite l'affichage aux machines spéciales.", action="store_true")
|
||||||
|
parser.add_argument('-s', '--sshfp', help="Affiche les fingerprint SSH si elles existent.", action="store_true")
|
||||||
|
parser.add_argument('--switch', help="Limite l'affichage aux switches (pas encore implémenté).", action="store_true")
|
||||||
|
parser.add_argument('-t', '--ldap', help="Utiliser les filtres tels que définis dans ldap", 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")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
if args.help:
|
||||||
|
parser.print_help()
|
||||||
|
sys.exit(0)
|
||||||
|
else:
|
||||||
|
# Promis, quand j'aurai la foi, je ferai ça avec argparse.
|
||||||
|
if int(args.adherent) + int(args.adm) + int(args.borne) + int(args.club) + int(args.crans) + int(args.machine) + int(args.serveur) + int(args.special) + int(args.switch) >= 2:
|
||||||
|
raise EnvironmentError("Les arguments limitant l'affiachage de résultats à certains types d'objets sont mutuellement exclusifs.")
|
||||||
|
#logger = Logger()
|
||||||
|
explore_db(args)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue