diff --git a/crans_utils.py b/crans_utils.py index 632acfe..515acec 100644 --- a/crans_utils.py +++ b/crans_utils.py @@ -80,7 +80,7 @@ def ip4_of_rid(rid): net, plage = find_rid_plage(rid) if net == 'Inconnu': raise ValueError("Rid dans aucune plage: %d" % rid) - + if net == 'special': try: return netaddr.IPAddress(config.rid_machines_speciales[rid]) @@ -103,7 +103,7 @@ def rid_of_ip4(ipv4): # Le cas non-échéant, on va devoir faire de la deep NETs inspection realm, sousplage = find_ipv4_plage(ipv4) - + return config.rid[realm][0][0] + int(ipv4 - sousplage.first) def prefixev6_of_rid(rid): @@ -119,7 +119,7 @@ def prefixev6_of_rid(rid): net, plage = find_rid_plage(rid) if net == 'Inconnu': raise ValueError("Rid dans aucune plage: %d" % rid) - + # adherents-v6 ou wifi-adh-v6, we don't care return netaddr.IPAddress(netaddr.IPNetwork(config.prefix['adherents-v6'][0]).first + 2**64*rid) @@ -135,7 +135,7 @@ def ip6_of_mac(mac, rid): net, plage = find_rid_plage(rid) if net == 'Inconnu': raise ValueError("Rid dans aucune plage: %d" % rid) - + # En théorie, format_mac est inutile, car on ne devrait avoir # que des mac formatées. mac = format_mac(mac) @@ -238,12 +238,14 @@ def escape(chaine): return ldap.filter.escape_filter_chars(chaine) -def hash_password(password, salt=None): +def hash_password(password, salt=None, longueur=4): + if longueur < 4: + raise ValueError("salt devrait faire au moins 4 octets") if salt is None: - salt = os.urandom(8) - elif len(salt)<8: - raise ValueError("salt devrait faire au moins 8 octets") - + salt = os.urandom(longueur) + elif len(salt)<4: + raise ValueError("salt devrait faire au moins 4 octets") + return '{SSHA}' + base64.b64encode(hashlib.sha1(password + salt).digest() + salt) def decode_subjectAltName(data):