[ldap/gest_crans] Ajout de deux champs dans la base LDAP, et des menus adéquats dans gest_crans.
Ignore-this: cd9025c95e35e80041570d629a944e2d On ajoute ssh fingerprint pour les machines, ainsi on peut mettre les fingerprint ssh dans les champs DNSSEC via generate. Le champ gpgfingerprint est pour les adhérents avec compte crans qui ont une clé gpg. Mise en place des menus adaptés dans gest_crans. Les options sur l'intranet (2) sont à venir. darcs-hash:20130112084446-b6762-97c821f579bf4c79183630e5ffc97124449a9b61.gz
This commit is contained in:
parent
5df70ea40a
commit
d6944ca03b
2 changed files with 122 additions and 7 deletions
|
@ -1569,6 +1569,12 @@ def set_machine_alias(machine):
|
|||
machine.restore()
|
||||
return 1
|
||||
|
||||
def set_machine_sshFingerprint(machine):
|
||||
u"""Définit la liste des fingerprints d'une machine"""
|
||||
if __prompt_input_menu(machine.sshFingerprint, 'SSHFingerprint machine', "Entrez ou modifier la fingerprint ssh de la machine.\nPour ajouter une fingerprint modifier le dernier de la liste.") or confirm(machine):
|
||||
machine.restore()
|
||||
return 1
|
||||
|
||||
def del_machine(machine):
|
||||
u"""
|
||||
Destruction machine
|
||||
|
@ -1671,6 +1677,7 @@ def modif_adher(adher):
|
|||
if payant:
|
||||
arg += u'"Mail" "Créer un compte ou changer l\'adresse mail de contact" '
|
||||
arg += u'"Alias" "Créer ou supprimer un alias mail" '
|
||||
arg += u'"GPGFingerprint" "Ajouter ou supprimer une empreinte GPG" '
|
||||
arg += u'"Remarque" "Ajouter ou modifer un commentaire" '
|
||||
if isadm or isbureau:
|
||||
if 'cransAccount' in adher._data['objectClass']:
|
||||
|
@ -1787,6 +1794,9 @@ def modif_adher(adher):
|
|||
elif res[0] == 'Alias':
|
||||
__prompt_input_menu(adher.alias, 'Alias mail', "Entrez ou modifier un alias mail.\nPour ajouter un alias modifier le dernier de la liste.")
|
||||
|
||||
elif res[0] == 'GPGFingerprint':
|
||||
__prompt_input_menu(adher.gpgFingerprint, 'GPG Fingerprint', u"Entrez ou modifier une empreinte GPG que l'adhérent possède (tout abus sera sanctionné).\nPour ajouter une empreinte modifier le dernier de la liste.")
|
||||
|
||||
elif res[0] == 'Shell':
|
||||
while 1:
|
||||
arg = u'--title "Nouveau shell pour %s" ' % adher.Nom()
|
||||
|
@ -1832,6 +1842,7 @@ def modif_machine(machine):
|
|||
arg += u'"Informations" "Modifier le nom de machine, l\'IP, adresse MAC" '
|
||||
arg += u'"Blackliste" "Modifier la blacklist de la machine" '
|
||||
arg += u'"Alias" "Créer ou supprimer un alias de la machine" '
|
||||
arg += u'"SSHFingerprint" "Ajouter ou enlever une empreinte ssh à la machine" '
|
||||
arg += u'"Exemptions" "Modifier la liste d\'exemption d\'upload de la machine" '
|
||||
arg += u'"Remarques" "Ajouter ou supprimer une remarque de la machine" '
|
||||
if isinstance(machine, BorneWifi) and isadm:
|
||||
|
@ -1851,6 +1862,8 @@ def modif_machine(machine):
|
|||
set_blackliste(machine)
|
||||
elif res[0] == 'Alias':
|
||||
set_machine_alias(machine)
|
||||
elif res[0] == 'SSHFingerprint':
|
||||
set_machine_sshFingerprint(machine)
|
||||
elif res[0] == 'Exemptions':
|
||||
set_machine_exemption(machine)
|
||||
elif res[0] == 'Remarques':
|
||||
|
|
|
@ -190,7 +190,6 @@ def preattr(val):
|
|||
else:
|
||||
raise TypeError
|
||||
|
||||
|
||||
def is_actif(sanction):
|
||||
"""
|
||||
Retourne True ou False suivant si la sanction fournie (chaîne
|
||||
|
@ -234,6 +233,33 @@ def format_mac(mac):
|
|||
|
||||
return mac
|
||||
|
||||
def format_gpg_fingerprint(fpr):
|
||||
"""
|
||||
Formatage de fingerpring GPG pour les avoir de la forme
|
||||
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
|
||||
"""
|
||||
|
||||
# longueur + fpr sans espaces
|
||||
l, fpr = preattr(fpr)
|
||||
|
||||
fpr = fpr.replace(':', '').replace('-', '').replace(' ', '')
|
||||
|
||||
if len(fpr) != 40:
|
||||
raise ValueError(u"Longueur de la fingerprint GPG incorrecte, merci de respecter le format")
|
||||
|
||||
for c in fpr:
|
||||
if c not in string.hexdigits:
|
||||
raise ValueError(u"Une fingerpring GPG est exclusivement composée de caractères hexadécimaux, donc il faut virer %s." % c)
|
||||
|
||||
formattedfpr = ""
|
||||
for i in range(0,10):
|
||||
formattedfpr += fpr[i*4:(i+1)*4]
|
||||
|
||||
if i != 10:
|
||||
formattedfpr += " "
|
||||
|
||||
return formattedfpr
|
||||
|
||||
def validate_mail(mail, crans_allowed=False):
|
||||
"""Valide une adresse e-mail"""
|
||||
l, mail = preattr(mail)
|
||||
|
@ -337,7 +363,8 @@ class CransLdap:
|
|||
# Champs de recherche pour la recherche manuelle (en plus de la recherche auto)
|
||||
non_auto_search_machines_champs = \
|
||||
['mid', 'historique', 'blacklist', 'info', 'exempt', 'mblacklist',
|
||||
'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'dnsIpv6', 'machineAlias']
|
||||
'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout', 'dnsIpv6', 'machineAlias',
|
||||
'sshFingerprint']
|
||||
|
||||
non_auto_search_champs = { \
|
||||
'adherent': \
|
||||
|
@ -345,7 +372,7 @@ class CransLdap:
|
|||
'historique', 'blacklist', 'droits', 'uidNumber', 'info',
|
||||
'solde', 'controle', 'contourneGreylist', 'rewriteMailHeaders',
|
||||
'ablacklist', 'homepageAlias', 'charteMA',
|
||||
'adherentPayant'], \
|
||||
'adherentPayant', 'gpgFingerprint'], \
|
||||
'club': \
|
||||
['cid', 'responsable', 'paiement', 'historique', 'blacklist',
|
||||
'mailAlias', 'info', 'controle', 'ablacklist', 'imprimeurClub'], \
|
||||
|
@ -452,7 +479,8 @@ class CransLdap:
|
|||
peuvent être :
|
||||
|
||||
aid $ chbre $ mail $ mailAlias $ canonicalAlias $
|
||||
mid $ macAddress $ host $ hostAlias $ ipHostNumber
|
||||
mid $ macAddress $ host $ hostAlias $ ipHostNumber $
|
||||
gpgFingerprint
|
||||
|
||||
Retourne le dn du lock
|
||||
"""
|
||||
|
@ -1177,7 +1205,7 @@ class BaseClasseCrans(CransLdap):
|
|||
for champ in ['droits', 'controle', 'paiement', 'carteEtudiant',
|
||||
'mailAlias', 'hostAlias', 'exempt', 'nvram',
|
||||
'portTCPin', 'portTCPout', 'portUDPin', 'portUDPout',
|
||||
'homepageAlias', 'imprimeurClub']:
|
||||
'homepageAlias', 'imprimeurClub', 'gpgFingerprint']:
|
||||
if champ in self.modifs:
|
||||
if champ == 'controle':
|
||||
# Ce n'est pas pareil que self._init_data.get('controle', [''])
|
||||
|
@ -1493,6 +1521,44 @@ class BaseProprietaire(BaseClasseCrans):
|
|||
self._set('mailAlias', liste)
|
||||
return liste
|
||||
|
||||
def gpgFingerprint(self, new=None):
|
||||
"""
|
||||
Fonction d'ajout d'empreinte GPG
|
||||
"""
|
||||
|
||||
liste = list(self._data.get('gpgFingerprint', []))
|
||||
|
||||
if new == None:
|
||||
return liste
|
||||
|
||||
else:
|
||||
if type(new) == list:
|
||||
# Modif
|
||||
index = new[0]
|
||||
new = new[1]
|
||||
if new == '':
|
||||
# Supression alias
|
||||
liste.pop(index)
|
||||
self._set('gpgFingerprint', liste)
|
||||
return liste
|
||||
else:
|
||||
index = -1
|
||||
|
||||
new = format_gpg_fingerprint(new)
|
||||
new = new.upper()
|
||||
|
||||
#if gpgexists(new):
|
||||
# raise ValueError(u"Alias existant ou correspondand à un compte.")
|
||||
|
||||
if index != -1:
|
||||
liste[index] = new
|
||||
else:
|
||||
liste = liste + [ new ]
|
||||
|
||||
self.lock('gpgFingerprint', new)
|
||||
self._set('gpgFingerprint', liste)
|
||||
return liste
|
||||
|
||||
def homepageAlias(self, new=None):
|
||||
"""
|
||||
Creation ou visualisation des alias de page perso.
|
||||
|
@ -2242,7 +2308,8 @@ class Adherent(BaseProprietaire):
|
|||
'uidNumber', 'gidNumber', 'homeDirectory', 'gecos',
|
||||
'droits', 'mailAlias', 'canonicalAlias',
|
||||
'rewriteMailHeaders', 'contourneGreylist',
|
||||
'homepageAlias', 'derniereConnexion', 'solde' ]:
|
||||
'homepageAlias', 'derniereConnexion', 'solde',
|
||||
'gpgFingerprint']:
|
||||
try: self._data.pop(c)
|
||||
except: pass
|
||||
|
||||
|
@ -2934,6 +3001,41 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
|||
self._set('hostAlias', liste)
|
||||
return liste
|
||||
|
||||
def sshFingerprint(self, new=None):
|
||||
"""
|
||||
Fonction d'ajout d'empreinte SSH
|
||||
"""
|
||||
|
||||
liste = list(self._data.get('sshFingerprint', []))
|
||||
|
||||
if new == None:
|
||||
return liste
|
||||
|
||||
else:
|
||||
if type(new) == list:
|
||||
# Modif
|
||||
index = new[0]
|
||||
new = new[1]
|
||||
if new == '':
|
||||
# Supression alias
|
||||
liste.pop(index)
|
||||
self._set('sshFingerprint', liste)
|
||||
return liste
|
||||
else:
|
||||
index = -1
|
||||
|
||||
#if gpgexists(new):
|
||||
# raise ValueError(u"FPR existant ou correspondand à un compte.")
|
||||
|
||||
if index != -1:
|
||||
liste[index] = new
|
||||
else:
|
||||
liste = liste + [ new ]
|
||||
|
||||
self.lock('sshFingerprint', new)
|
||||
self._set('sshFingerprint', liste)
|
||||
return liste
|
||||
|
||||
def ip(self, ip=None):
|
||||
"""
|
||||
Défini ou retourne l'IP de la machine.
|
||||
|
@ -3114,7 +3216,7 @@ Contactez nounou si la MAC est bien celle d'une carte.""", 3)
|
|||
self.services_to_restart('mail_modif', ['ip=%s' % self.ip()])
|
||||
|
||||
# Reconfiguration DNS ?
|
||||
if 'host' in self.modifs or 'ipHostNumber' in self.modifs or 'hostAlias' in self.modifs or 'dnsIpv6' in self.modifs:
|
||||
if 'host' in self.modifs or 'ipHostNumber' in self.modifs or 'hostAlias' in self.modifs or 'dnsIpv6' in self.modifs or 'sshFingerprint' in self.modifs:
|
||||
self.services_to_restart('dns')
|
||||
|
||||
# Reconfiguration bornes wifi ?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue