From 03fba819f0d9832b845d1af7f52a860b2a7f1c25 Mon Sep 17 00:00:00 2001 From: chirac Date: Fri, 8 Jan 2021 23:46:25 +0100 Subject: [PATCH 1/3] Add erdnaxe proposal of fix because there is no better solution --- machines/models.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/machines/models.py b/machines/models.py index 9fd524be..718531bd 100644 --- a/machines/models.py +++ b/machines/models.py @@ -1276,10 +1276,17 @@ class SshFp(RevMixin, AclMixin, models.Model): """Get the hashes for the pub key with correct ID. See RFC: 1 is sha1 , 2 is sha256. + + Because of b64 MUST be divided by 4, we add a "padding" = carracter 3 times. + This padding is then ignored if the pubkey is greater than a multiple of 4. + More informations on : https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770 + As said in the thread, this fix is not optimal, however it is very simple as + no options on b64decode function exists. """ + pubkey = base64.b64decode(self.pub_key_entry + "===") return { - "1": hashlib.sha1(base64.b64decode(self.pub_key_entry)).hexdigest(), - "2": hashlib.sha256(base64.b64decode(self.pub_key_entry)).hexdigest(), + "1": hashlib.sha1(pubkey).hexdigest(), + "2": hashlib.sha256(pubkey).hexdigest(), } class Meta: From 2f98bd4a8deb21c180805cdc817b06ca82b5b72e Mon Sep 17 00:00:00 2001 From: chirac Date: Sat, 9 Jan 2021 00:47:04 +0100 Subject: [PATCH 2/3] Add specific function and check on validation for sshfp --- machines/models.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/machines/models.py b/machines/models.py index 718531bd..5884d975 100644 --- a/machines/models.py +++ b/machines/models.py @@ -1276,14 +1276,8 @@ class SshFp(RevMixin, AclMixin, models.Model): """Get the hashes for the pub key with correct ID. See RFC: 1 is sha1 , 2 is sha256. - - Because of b64 MUST be divided by 4, we add a "padding" = carracter 3 times. - This padding is then ignored if the pubkey is greater than a multiple of 4. - More informations on : https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770 - As said in the thread, this fix is not optimal, however it is very simple as - no options on b64decode function exists. """ - pubkey = base64.b64decode(self.pub_key_entry + "===") + pubkey = self.base64_pubkey() return { "1": hashlib.sha1(pubkey).hexdigest(), "2": hashlib.sha256(pubkey).hexdigest(), @@ -1303,6 +1297,31 @@ class SshFp(RevMixin, AclMixin, models.Model): def can_delete(self, user_request, *args, **kwargs): return self.machine.can_delete(user_request, *args, **kwargs) + def base64_pubkey(self): + """Function to decode in base64 the pub key entry + + Returns: + Base64 decoded value of pub_key_entry + + Because of b64 MUST be divided by 4, we add a "padding" = carracter 3 times. + This padding is then ignored if the pubkey is greater than a multiple of 4. + More informations on : https://gist.github.com/perrygeo/ee7c65bb1541ff6ac770 + As said in the thread, this fix is not optimal, however it is very simple as + no options on b64decode function exists.""" + return base64.b64decode(self.pub_key_entry + "===") + + def clean(self, *args, **kwargs): + """Check if the pub_key_entry is a valid base64 entry. + + Raises: + ValidationError: the pub key entry is not a valid base64 enty. + """ + try: + self.base64_pubkey() + except ValueError: + raise ValidationError(_("Ssh pub key entry is incorrect base64 entry")) + super(SshFp, self).clean(*args, **kwargs) + def __str__(self): return str(self.algo) + " " + str(self.comment) From ea2fe03b9d5e10f7c2d27cad1527fef342426b31 Mon Sep 17 00:00:00 2001 From: chirac Date: Sat, 9 Jan 2021 00:51:36 +0100 Subject: [PATCH 3/3] Translation for error message --- machines/locale/fr/LC_MESSAGES/django.po | 609 ++++++++++++----------- 1 file changed, 309 insertions(+), 300 deletions(-) diff --git a/machines/locale/fr/LC_MESSAGES/django.po b/machines/locale/fr/LC_MESSAGES/django.po index 1709f5e6..b5a5abb0 100644 --- a/machines/locale/fr/LC_MESSAGES/django.po +++ b/machines/locale/fr/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: 2.5\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-11-17 22:00+0100\n" +"POT-Creation-Date: 2021-01-09 00:47+0100\n" "PO-Revision-Date: 2018-06-23 16:35+0200\n" "Last-Translator: Yoann Piétri \n" "Language-Team: \n" @@ -34,112 +34,112 @@ msgstr "" msgid "You don't have the right to view this application." msgstr "Vous n'avez pas le droit de voir cette application." -#: machines/forms.py:78 +#: machines/forms.py:83 msgid "Machine name" msgstr "Nom de la machine" -#: machines/forms.py:99 machines/templates/machines/aff_machines.html:81 +#: machines/forms.py:117 machines/templates/machines/aff_machines.html:81 msgid "MAC address" msgstr "Adresse MAC" -#: machines/forms.py:100 machines/templates/machines/aff_machinetype.html:32 -#: machines/templates/machines/machine.html:112 +#: machines/forms.py:118 machines/templates/machines/aff_machinetype.html:32 +#: machines/templates/machines/machine.html:120 msgid "Machine type" msgstr "Type de machine" -#: machines/forms.py:101 +#: machines/forms.py:119 msgid "Select a machine type" msgstr "Sélectionnez un type de machine" -#: machines/forms.py:103 +#: machines/forms.py:121 msgid "Automatic IPv4 assignment" msgstr "Assignation automatique IPv4" -#: machines/forms.py:173 +#: machines/forms.py:194 msgid "Current aliases" msgstr "Alias actuels" -#: machines/forms.py:195 +#: machines/forms.py:219 msgid "Machine type to add" msgstr "Type de machine à ajouter" -#: machines/forms.py:196 +#: machines/forms.py:220 msgid "Related IP type" msgstr "Type d'IP relié" -#: machines/forms.py:204 +#: machines/forms.py:228 msgid "Current machine types" msgstr "Types de machines actuels" -#: machines/forms.py:229 +#: machines/forms.py:260 msgid "IP type to add" msgstr "Type d'IP à ajouter" -#: machines/forms.py:258 +#: machines/forms.py:289 msgid "Current IP types" msgstr "Types d'IP actuels" -#: machines/forms.py:281 +#: machines/forms.py:312 msgid "Extension to add" msgstr "Extension à ajouter" -#: machines/forms.py:282 machines/templates/machines/aff_extension.html:37 +#: machines/forms.py:313 machines/templates/machines/aff_extension.html:37 msgid "A record origin" msgstr "Enregistrement A origin" -#: machines/forms.py:283 machines/templates/machines/aff_extension.html:39 +#: machines/forms.py:314 machines/templates/machines/aff_extension.html:39 msgid "AAAA record origin" msgstr "Enregistrement AAAA origin" -#: machines/forms.py:284 +#: machines/forms.py:315 msgid "SOA record to use" msgstr "Enregistrement SOA à utiliser" -#: machines/forms.py:285 +#: machines/forms.py:316 msgid "Sign with DNSSEC" msgstr "Signer avec DNSSEC" -#: machines/forms.py:293 +#: machines/forms.py:324 msgid "Current extensions" msgstr "Extensions actuelles" -#: machines/forms.py:335 +#: machines/forms.py:366 msgid "Current SOA records" msgstr "Enregistrements SOA actuels" -#: machines/forms.py:368 +#: machines/forms.py:403 msgid "Current MX records" msgstr "Enregistrements MX actuels" -#: machines/forms.py:403 +#: machines/forms.py:442 msgid "Current NS records" msgstr "Enregistrements NS actuels" -#: machines/forms.py:433 +#: machines/forms.py:475 msgid "Current TXT records" msgstr "Enregistrements TXT actuels" -#: machines/forms.py:463 +#: machines/forms.py:508 msgid "Current DNAME records" msgstr "Enregistrements DNAME actuels" -#: machines/forms.py:493 +#: machines/forms.py:542 msgid "Current SRV records" msgstr "Enregistrements SRV actuels" -#: machines/forms.py:523 +#: machines/forms.py:580 msgid "Current NAS devices" msgstr "Dispositifs NAS actuels" -#: machines/forms.py:556 +#: machines/forms.py:618 msgid "Current roles" msgstr "Rôles actuels" -#: machines/forms.py:598 +#: machines/forms.py:665 msgid "Current services" msgstr "Services actuels" -#: machines/forms.py:640 +#: machines/forms.py:707 msgid "Current VLANs" msgstr "VLANs actuels" @@ -155,7 +155,7 @@ msgstr "Peut voir un objet machine" msgid "Can change the user of a machine" msgstr "Peut changer l'utilisateur d'une machine" -#: machines/models.py:85 machines/views.py:309 +#: machines/models.py:85 machines/views.py:220 msgid "machine" msgstr "machine" @@ -175,7 +175,7 @@ msgstr "Vous n'avez pas le droit de voir toutes les machines." msgid "Nonexistent user." msgstr "Utilisateur inexistant." -#: machines/models.py:161 machines/models.py:1514 +#: machines/models.py:161 machines/models.py:1594 msgid "You don't have the right to add a machine." msgstr "Vous n'avez pas le droit d'ajouter une machine." @@ -183,7 +183,7 @@ msgstr "Vous n'avez pas le droit d'ajouter une machine." msgid "You don't have the right to add a machine to another user." msgstr "Vous n'avez pas le droit d'ajouter une machine à un autre utilisateur." -#: machines/models.py:174 machines/models.py:1533 +#: machines/models.py:174 machines/models.py:1613 #, python-format msgid "" "You reached the maximum number of interfaces that you are allowed to create " @@ -192,7 +192,7 @@ msgstr "" "Vous avez atteint le nombre maximal d'interfaces que vous pouvez créer vous-" "même (%s)." -#: machines/models.py:199 machines/models.py:1576 +#: machines/models.py:199 machines/models.py:1656 msgid "You don't have the right to edit a machine of another user." msgstr "" "Vous n'avez pas le droit de modifier une machine d'un autre utilisateur." @@ -202,7 +202,7 @@ msgid "You don't have the right to delete a machine of another user." msgstr "" "Vous n'avez pas le droit de supprimer une machine d'une autre utilisateur." -#: machines/models.py:245 machines/models.py:2073 +#: machines/models.py:245 machines/models.py:2153 msgid "You don't have the right to view other machines than yours." msgstr "Vous n'avez pas le droit de voir d'autres machines que les vôtres." @@ -226,43 +226,43 @@ msgstr "type de machine" msgid "machine types" msgstr "types de machine" -#: machines/models.py:376 +#: machines/models.py:376 machines/models.py:402 machines/models.py:2234 msgid "You don't have the right to use all machine types." msgstr "Vous n'avez pas le droit d'utiliser tous les types de machine." -#: machines/models.py:413 +#: machines/models.py:441 msgid "Network containing the domain's IPv4 range (optional)." msgstr "Réseau contenant la plage IPv4 du domaine (optionnel)." -#: machines/models.py:418 +#: machines/models.py:446 msgid "Netmask for the domain's IPv4 range." msgstr "Masque de sous-réseau pour la plage IPv4 du domaine." -#: machines/models.py:421 +#: machines/models.py:449 msgid "Enable reverse DNS for IPv4." msgstr "Activer DNS inverse pour IPv4." -#: machines/models.py:428 +#: machines/models.py:456 msgid "Enable reverse DNS for IPv6." msgstr "Activer DNS inverse pour IPv6." -#: machines/models.py:435 +#: machines/models.py:463 msgid "Can view an IP type object" msgstr "Peut voir un objet type d'IP" -#: machines/models.py:436 +#: machines/models.py:464 msgid "Can use all IP types" msgstr "Peut utiliser tous les types d'IP" -#: machines/models.py:438 machines/templates/machines/machine.html:108 +#: machines/models.py:466 machines/templates/machines/machine.html:116 msgid "IP type" -msgstr "type d'IP" +msgstr "Type d'IP" -#: machines/models.py:439 +#: machines/models.py:467 msgid "IP types" -msgstr "types d'IP" +msgstr "Types d'IP" -#: machines/models.py:555 +#: machines/models.py:583 msgid "" "One or several IP addresses from the range are affected, impossible to " "delete the range." @@ -270,25 +270,25 @@ msgstr "" "Une ou plusieurs adresses IP de la plage sont affectées, impossible de " "supprimer la plage." -#: machines/models.py:616 +#: machines/models.py:644 msgid "Domaine IPv4 start and stop must be valid" msgstr "Les valeurs IPv4 Domaine ip start et stop doivent être valides" -#: machines/models.py:618 +#: machines/models.py:646 msgid "Range end must be after range start..." msgstr "La fin de la plage doit être après le début..." -#: machines/models.py:623 +#: machines/models.py:651 msgid "The range is too large, you can't create a larger one than a /16." msgstr "" "La plage est trop grande, vous ne pouvez pas en créer une plus grande " "qu'un /16." -#: machines/models.py:631 +#: machines/models.py:659 msgid "The specified range is not disjoint from existing ranges." msgstr "La plage renseignée n'est pas disjointe des plages existantes." -#: machines/models.py:644 +#: machines/models.py:672 msgid "" "If you specify a domain network or netmask, it must contain the domain's IP " "range." @@ -296,47 +296,47 @@ msgstr "" "Si vous renseignez un réseau ou masque de sous-réseau, il doit contenir la " "plage IP du domaine." -#: machines/models.py:699 +#: machines/models.py:727 msgid "v4 multicast management." msgstr "gestion de multidiffusion v4." -#: machines/models.py:700 +#: machines/models.py:728 msgid "v6 multicast management." msgstr "gestion de multidiffusion v6." -#: machines/models.py:703 +#: machines/models.py:731 msgid "Can view a VLAN object" msgstr "Peut voir un objet VLAN" -#: machines/models.py:704 machines/templates/machines/machine.html:160 +#: machines/models.py:732 machines/templates/machines/machine.html:168 msgid "VLAN" msgstr "VLAN" -#: machines/models.py:705 +#: machines/models.py:733 msgid "VLANs" msgstr "VLANs" -#: machines/models.py:724 +#: machines/models.py:752 msgid "MAC-address" msgstr "MAC-address" -#: machines/models.py:739 +#: machines/models.py:767 msgid "Can view a NAS device object" msgstr "Peut voir un objet dispositif NAS" -#: machines/models.py:740 machines/templates/machines/machine.html:164 +#: machines/models.py:768 machines/templates/machines/machine.html:172 msgid "NAS device" -msgstr "dispositif NAS" +msgstr "Dispositif NAS" -#: machines/models.py:741 +#: machines/models.py:769 msgid "NAS devices" -msgstr "dispositifs NAS" +msgstr "Dispositifs NAS" -#: machines/models.py:766 +#: machines/models.py:794 msgid "Contact email address for the zone." msgstr "Adresse mail de contact pour la zone." -#: machines/models.py:770 +#: machines/models.py:798 msgid "" "Seconds before the secondary DNS have to ask the primary DNS serial to " "detect a modification." @@ -344,7 +344,7 @@ msgstr "" "Secondes avant que le DNS secondaire demande au DNS primaire le serial pour " "détecter une modification." -#: machines/models.py:777 +#: machines/models.py:805 msgid "" "Seconds before the secondary DNS ask the serial again in case of a primary " "DNS timeout." @@ -352,7 +352,7 @@ msgstr "" "Secondes avant que le DNS secondaire demande le serial de nouveau dans le " "cas d'un délai d'attente du DNS primaire." -#: machines/models.py:784 +#: machines/models.py:812 msgid "" "Seconds before the secondary DNS stop answering requests in case of primary " "DNS timeout." @@ -360,121 +360,127 @@ msgstr "" "Secondes avant que le DNS secondaire arrête de répondre aux requêtes dans le " "cas d'un délai d'attente du DNS primaire." -#: machines/models.py:789 machines/models.py:1116 +#: machines/models.py:817 machines/models.py:1170 msgid "Time To Live." msgstr "Temps de vie" -#: machines/models.py:793 +#: machines/models.py:821 msgid "Can view an SOA record object" msgstr "Peut voir un objet enregistrement SOA" -#: machines/models.py:794 machines/templates/machines/aff_extension.html:36 -#: machines/templates/machines/machine.html:120 +#: machines/models.py:822 machines/templates/machines/aff_extension.html:36 +#: machines/templates/machines/machine.html:128 msgid "SOA record" -msgstr "enregistrement SOA" +msgstr "Enregistrement SOA" -#: machines/models.py:795 +#: machines/models.py:823 msgid "SOA records" -msgstr "enregistrements SOA" +msgstr "Enregistrements SOA" -#: machines/models.py:835 +#: machines/models.py:863 msgid "SOA to edit" msgstr "SOA à modifier" -#: machines/models.py:855 +#: machines/models.py:883 msgid "Zone name, must begin with a dot (.example.org)." msgstr "Nom de zone, doit commencer par un point (.example.org)." -#: machines/models.py:863 +#: machines/models.py:891 msgid "A record associated with the zone." msgstr "Enregistrement A associé à la zone." -#: machines/models.py:869 +#: machines/models.py:897 msgid "AAAA record associated with the zone." msgstr "Enregristrement AAAA associé avec la zone." -#: machines/models.py:873 +#: machines/models.py:901 msgid "Should the zone be signed with DNSSEC." msgstr "La zone doit-elle être signée avec DNSSEC." -#: machines/models.py:878 +#: machines/models.py:906 msgid "Can view an extension object" msgstr "Peut voir un objet extension" -#: machines/models.py:879 +#: machines/models.py:907 msgid "Can use all extensions" msgstr "Peut utiliser toutes les extensions" -#: machines/models.py:881 +#: machines/models.py:909 msgid "DNS extension" -msgstr "extension DNS" +msgstr "Extension DNS" -#: machines/models.py:882 +#: machines/models.py:910 msgid "DNS extensions" -msgstr "extensions DNS" +msgstr "Extensions DNS" -#: machines/models.py:952 +#: machines/models.py:980 msgid "You don't have the right to use all extensions." msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions." -#: machines/models.py:961 +#: machines/models.py:1005 +#, fuzzy +#| msgid "You don't have the right to use all extensions." +msgid "You don't have the right to list all extensions." +msgstr "Vous n'avez pas le droit d'utiliser toutes les extensions." + +#: machines/models.py:1015 msgid "An extension must begin with a dot." msgstr "Une extension doit commencer par un point." -#: machines/models.py:981 machines/models.py:1013 machines/models.py:1045 -#: machines/models.py:1075 machines/models.py:1870 +#: machines/models.py:1035 machines/models.py:1067 machines/models.py:1099 +#: machines/models.py:1129 machines/models.py:1950 msgid "Time To Live (TTL)" msgstr "Temps de vie (TTL)" -#: machines/models.py:985 +#: machines/models.py:1039 msgid "Can view an MX record object" msgstr "Peut voir un objet enregistrement MX" -#: machines/models.py:986 machines/templates/machines/machine.html:124 +#: machines/models.py:1040 machines/templates/machines/machine.html:132 msgid "MX record" -msgstr "enregistrement MX" +msgstr "Enregistrement MX" -#: machines/models.py:987 +#: machines/models.py:1041 msgid "MX records" -msgstr "enregistrements MX" +msgstr "Enregistrements MX" -#: machines/models.py:1017 +#: machines/models.py:1071 msgid "Can view an NS record object" msgstr "Peut voir un objet enregistrement NS" -#: machines/models.py:1018 machines/templates/machines/machine.html:128 +#: machines/models.py:1072 machines/templates/machines/machine.html:136 msgid "NS record" -msgstr "enregistrement NS" +msgstr "Enregistrement NS" -#: machines/models.py:1019 +#: machines/models.py:1073 msgid "NS records" -msgstr "enregistrements NS" +msgstr "Enregistrements NS" -#: machines/models.py:1049 +#: machines/models.py:1103 msgid "Can view a TXT record object" msgstr "Peut voir un objet enregistrement TXT" -#: machines/models.py:1050 machines/templates/machines/machine.html:132 +#: machines/models.py:1104 machines/templates/machines/machine.html:140 msgid "TXT record" msgstr "enregistrement TXT" -#: machines/models.py:1051 +#: machines/models.py:1105 msgid "TXT records" msgstr "enregistrements TXT" -#: machines/models.py:1079 +#: machines/models.py:1133 msgid "Can view a DNAME record object" msgstr "Peut voir un objet enregistrement DNAME" -#: machines/models.py:1080 machines/templates/machines/machine.html:136 +#: machines/models.py:1134 machines/templates/machines/machine.html:144 msgid "DNAME record" msgstr "enregistrement DNAME" -#: machines/models.py:1081 +#: machines/models.py:1135 msgid "DNAME records" msgstr "enregistrements DNAME" -#: machines/models.py:1122 +#: machines/models.py:1176 msgid "" "Priority of the target server (positive integer value, the lower it is, the " "more the server will be used if available)." @@ -482,7 +488,7 @@ msgstr "" "Priorité du serveur cible (entier positif, plus il est bas, plus le serveur " "sera utilisé si disponible)." -#: machines/models.py:1131 +#: machines/models.py:1185 msgid "" "Relative weight for records with the same priority (integer value between 0 " "and 65535)." @@ -490,168 +496,172 @@ msgstr "" "Poids relatif des enregistrements avec la même priorité (entier entre 0 et " "65535)." -#: machines/models.py:1136 +#: machines/models.py:1190 msgid "TCP/UDP port." msgstr "Port TCP/UDP." -#: machines/models.py:1139 +#: machines/models.py:1193 msgid "Target server." msgstr "Serveur cible." -#: machines/models.py:1143 +#: machines/models.py:1197 msgid "Can view an SRV record object" msgstr "Peut voir un objet enregistrement SRV" -#: machines/models.py:1144 machines/templates/machines/machine.html:140 +#: machines/models.py:1198 machines/templates/machines/machine.html:148 msgid "SRV record" msgstr "enregistrement SRV" -#: machines/models.py:1145 +#: machines/models.py:1199 msgid "SRV records" msgstr "enregistrements SRV" -#: machines/models.py:1204 +#: machines/models.py:1258 msgid "SSH public key." msgstr "Clé publique SSH." -#: machines/models.py:1207 +#: machines/models.py:1261 msgid "Comment." msgstr "Commentaire." -#: machines/models.py:1232 +#: machines/models.py:1287 msgid "Can view an SSHFP record object" msgstr "Peut voir un objet enregistrement SSHFP" -#: machines/models.py:1233 machines/templates/machines/machine.html:144 -#: machines/views.py:478 +#: machines/models.py:1288 machines/templates/machines/machine.html:152 +#: machines/views.py:387 msgid "SSHFP record" msgstr "enregistrement SSHFP" -#: machines/models.py:1234 +#: machines/models.py:1289 msgid "SSHFP records" msgstr "enregistrements SSHFP" -#: machines/models.py:1272 +#: machines/models.py:1322 +msgid "Ssh pub key entry is incorrect base64 entry" +msgstr "L'entrée Ssh pub key n'est pas une entrée base64 valide" + +#: machines/models.py:1352 msgid "Can view an interface object" msgstr "Peut voir un objet interface" -#: machines/models.py:1273 +#: machines/models.py:1353 msgid "Can change the owner of an interface" msgstr "Peut changer l'utilisateur d'une interface" -#: machines/models.py:1275 machines/views.py:362 +#: machines/models.py:1355 machines/views.py:271 msgid "interface" msgstr "interface" -#: machines/models.py:1276 +#: machines/models.py:1356 msgid "interfaces" msgstr "interfaces" -#: machines/models.py:1319 +#: machines/models.py:1399 msgid "Unknown vendor." msgstr "Constructeur inconnu." -#: machines/models.py:1389 +#: machines/models.py:1469 msgid "The given MAC address is invalid." msgstr "L'adresse MAC indiquée est invalide." -#: machines/models.py:1398 +#: machines/models.py:1478 msgid "There are no IP addresses available in the slash." msgstr "Il n'y a pas d'adresses IP disponibles dans le slash." -#: machines/models.py:1463 +#: machines/models.py:1543 msgid "The selected IP type is invalid." msgstr "Le type d'IP sélectionné est invalide." -#: machines/models.py:1477 +#: machines/models.py:1557 msgid "MAC address already registered in this machine type/subnet." msgstr "Adresse MAC déjà enregistrée dans ce type de machine/sous-réseau." -#: machines/models.py:1486 +#: machines/models.py:1566 msgid "The IPv4 address and the machine type don't match." msgstr "L'adresse IPv4 et le type de machine ne correspondent pas." -#: machines/models.py:1507 +#: machines/models.py:1587 msgid "Nonexistent machine." msgstr "Machine inexistante." -#: machines/models.py:1524 +#: machines/models.py:1604 msgid "" "You don't have the right to add an interface to a machine of another user." msgstr "" "Vous n'avez pas le droit d'ajouter une interface à une machine d'un autre " "utilisateur." -#: machines/models.py:1554 +#: machines/models.py:1634 msgid "You don't have the right to edit the machine." msgstr "Vous n'avez pas le droit d'éditer une machine." -#: machines/models.py:1600 +#: machines/models.py:1680 msgid "You don't have the right to delete interfaces of another user." msgstr "" "Vous n'avez pas le droit de supprimer une interface d'une autre utilisateur." -#: machines/models.py:1624 +#: machines/models.py:1704 msgid "You don't have the right to view interfaces other than yours." msgstr "Vous n'avez pas le droit de voir d'autres interfaces que les vôtres." -#: machines/models.py:1658 +#: machines/models.py:1738 msgid "If false,the DNS will not provide this ip." msgstr "Si faux, le DNS n'annoncera pas cette ip." -#: machines/models.py:1663 +#: machines/models.py:1743 msgid "Can view an IPv6 addresses list object" msgstr "Peut voir un objet list d'adresses IPv6" -#: machines/models.py:1666 +#: machines/models.py:1746 msgid "Can change the SLAAC value of an IPv6 addresses list" msgstr "Peut modifier la valeur SLAAC d'une liste d'adresses IPv6" -#: machines/models.py:1669 machines/views.py:422 +#: machines/models.py:1749 machines/views.py:331 msgid "IPv6 addresses list" msgstr "Liste d'adresses IPv6" -#: machines/models.py:1670 +#: machines/models.py:1750 msgid "IPv6 addresses lists" msgstr "Listes d'adresses IPv6" -#: machines/models.py:1688 machines/models.py:1973 +#: machines/models.py:1768 machines/models.py:2053 msgid "Nonexistent interface." msgstr "Interface inexistante." -#: machines/models.py:1694 +#: machines/models.py:1774 msgid "You don't have the right to add ipv6 to a machine of another user." msgstr "" "Vous n'avez pas le droit d'ajouter des ipv6 à une machine d'un autre " "utilisateur." -#: machines/models.py:1707 +#: machines/models.py:1787 msgid "You don't have the right to change the SLAAC value of an IPv6 address." msgstr "" "Vous n'avez pas le droit de changer la valeur SLAAC d'une adresse IPv6." -#: machines/models.py:1732 +#: machines/models.py:1812 msgid "You don't have the right to edit ipv6 of a machine of another user." msgstr "" "Vous n'avez pas le droit de modifier les ipv6 d'une machine d'un autre " "utilisateur." -#: machines/models.py:1757 +#: machines/models.py:1837 msgid "You don't have the right to delete ipv6 of a machine of another user." msgstr "" "Vous n'avez pas le droit de supprimer les ipv6 d'une machine d'une autre " "utilisateur." -#: machines/models.py:1781 +#: machines/models.py:1861 msgid "You don't have the right to view ipv6 of machines other than yours." msgstr "" "Vous n'avez pas le droit de voir les ipv6 d'autres machines que les vôtres." -#: machines/models.py:1814 +#: machines/models.py:1894 msgid "A SLAAC IP address is already registered." msgstr "Une adresse IP SLAAC est déjà enregistrée." -#: machines/models.py:1828 +#: machines/models.py:1908 msgid "" "The v6 prefix is incorrect and doesn't match the type associated with the " "machine." @@ -659,55 +669,55 @@ msgstr "" "Le préfixe v6 est incorrect et ne correspond pas au type associé à la " "machine." -#: machines/models.py:1863 +#: machines/models.py:1943 msgid "Mandatory and unique, must not contain dots." msgstr "Obligatoire et unique, ne doit pas contenir de points." -#: machines/models.py:1878 +#: machines/models.py:1958 msgid "Can view a domain object" msgstr "Peut voir un objet domaine" -#: machines/models.py:1879 +#: machines/models.py:1959 msgid "Can change the TTL of a domain object" msgstr "Peut changer le TTL d'un objet domaine" -#: machines/models.py:1881 +#: machines/models.py:1961 msgid "domain" msgstr "domaine" -#: machines/models.py:1882 +#: machines/models.py:1962 msgid "domains" msgstr "domaines" -#: machines/models.py:1909 +#: machines/models.py:1989 msgid "You can't create a both A and CNAME record." msgstr "Vous ne pouvez pas créer un enregistrement à la fois A et CNAME." -#: machines/models.py:1912 +#: machines/models.py:1992 msgid "You can't create a CNAME record pointing to itself." msgstr "Vous ne pouvez pas créer un enregistrement CNAME vers lui-même." -#: machines/models.py:1918 +#: machines/models.py:1998 #, python-format msgid "The domain name %s is too long (over 63 characters)." msgstr "Le nom de domaine %s est trop long (plus de 63 caractères)." -#: machines/models.py:1922 +#: machines/models.py:2002 #, python-format msgid "The domain name %s contains forbidden characters." msgstr "Le nom de domaine %s contient des caractères interdits." -#: machines/models.py:1940 +#: machines/models.py:2020 msgid "Invalid extension." msgstr "Extension invalide." -#: machines/models.py:1982 +#: machines/models.py:2062 msgid "You don't have the right to add an alias to a machine of another user." msgstr "" "Vous n'avez pas le droit d'ajouter un alias à une machine d'un autre " "utilisateur." -#: machines/models.py:1998 +#: machines/models.py:2078 #, python-format msgid "" "You reached the maximum number of alias that you are allowed to create " @@ -716,164 +726,164 @@ msgstr "" "Vous avez atteint le nombre maximal d'alias que vous pouvez créer vous-même " "(%s)." -#: machines/models.py:2024 +#: machines/models.py:2104 msgid "You don't have the right to edit an alias of a machine of another user." msgstr "" "Vous n'avez pas le droit de modifier un alias d'une machine d'un autre " "utilisateur." -#: machines/models.py:2049 +#: machines/models.py:2129 msgid "" "You don't have the right to delete an alias of a machine of another user." msgstr "" "Vous n'avez pas le droit de supprimer un alias d'une machine d'un autre " "utilisateur." -#: machines/models.py:2084 +#: machines/models.py:2164 msgid "You don't have the right to change the domain's TTL." msgstr "Vous n'avez pas le droit de changer le TTL du domaine." -#: machines/models.py:2106 +#: machines/models.py:2186 msgid "Can view an IPv4 addresses list object" msgstr "Peut voir un object liste d'adresses IPv4" -#: machines/models.py:2107 +#: machines/models.py:2187 msgid "IPv4 addresses list" msgstr "Liste d'adresses IPv4" -#: machines/models.py:2108 +#: machines/models.py:2188 msgid "IPv4 addresses lists" msgstr "Listes d'adresses IPv4" -#: machines/models.py:2125 +#: machines/models.py:2205 msgid "The IPv4 address and the range of the IP type don't match." msgstr "L'adresse IPv4 et la plage du type d'IP ne correspondent pas." -#: machines/models.py:2149 +#: machines/models.py:2257 msgid "DHCP server" msgstr "Serveur DHCP" -#: machines/models.py:2150 +#: machines/models.py:2258 msgid "Switches configuration server" msgstr "Serveur de configuration des commutateurs réseau" -#: machines/models.py:2151 +#: machines/models.py:2259 msgid "Recursive DNS server" msgstr "Serveur DNS récursif" -#: machines/models.py:2152 +#: machines/models.py:2260 msgid "NTP server" msgstr "Serveur NTP" -#: machines/models.py:2153 +#: machines/models.py:2261 msgid "RADIUS server" msgstr "Serveur RADIUS" -#: machines/models.py:2154 +#: machines/models.py:2262 msgid "Log server" msgstr "Serveur log" -#: machines/models.py:2155 +#: machines/models.py:2263 msgid "LDAP master server" msgstr "Serveur LDAP maître" -#: machines/models.py:2156 +#: machines/models.py:2264 msgid "LDAP backup server" msgstr "Serveur LDAP de secours" -#: machines/models.py:2157 +#: machines/models.py:2265 msgid "SMTP server" msgstr "Serveur SMTP" -#: machines/models.py:2158 +#: machines/models.py:2266 msgid "postgreSQL server" msgstr "Serveur postgreSQL" -#: machines/models.py:2159 +#: machines/models.py:2267 msgid "mySQL server" msgstr "Serveur mySQL" -#: machines/models.py:2160 +#: machines/models.py:2268 msgid "SQL client" msgstr "Client SQL" -#: machines/models.py:2161 +#: machines/models.py:2269 msgid "Gateway" msgstr "Passerelle" -#: machines/models.py:2169 +#: machines/models.py:2277 msgid "Can view a role object" msgstr "Peut voir un objet rôle" -#: machines/models.py:2170 +#: machines/models.py:2278 msgid "server role" msgstr "rôle de serveur" -#: machines/models.py:2171 +#: machines/models.py:2279 msgid "server roles" msgstr "rôles de serveur" -#: machines/models.py:2210 +#: machines/models.py:2318 msgid "Minimal time before regeneration of the service." msgstr "Temps minimal avant régénération du service." -#: machines/models.py:2214 +#: machines/models.py:2322 msgid "Maximal time before regeneration of the service." msgstr "Temps maximal avant régénération du service." -#: machines/models.py:2219 +#: machines/models.py:2327 msgid "Can view a service object" msgstr "Peut voir un objet service" -#: machines/models.py:2220 +#: machines/models.py:2328 msgid "service to generate (DHCP, DNS, ...)" msgstr "service à générer (DHCP, DNS, ...)" -#: machines/models.py:2221 +#: machines/models.py:2329 msgid "services to generate (DHCP, DNS, ...)" msgstr "services à générer (DHCP, DNS, ...)" -#: machines/models.py:2278 +#: machines/models.py:2386 msgid "Can view a service server link object" msgstr "Peut voir un objet lien service serveur" -#: machines/models.py:2280 +#: machines/models.py:2388 msgid "link between service and server" msgstr "lien entre service et serveur" -#: machines/models.py:2281 +#: machines/models.py:2389 msgid "links between service and server" msgstr "liens entre service et serveur" -#: machines/models.py:2328 +#: machines/models.py:2436 msgid "Name of the ports configuration" msgstr "Nom de la configuration de ports" -#: machines/models.py:2333 +#: machines/models.py:2441 msgid "Can view a ports opening list object" msgstr "Peut voir un objet liste d'ouverture de ports" -#: machines/models.py:2335 +#: machines/models.py:2443 msgid "ports opening list" msgstr "liste d'ouverture de ports" -#: machines/models.py:2336 +#: machines/models.py:2444 msgid "ports opening lists" msgstr "listes d'ouverture de ports" -#: machines/models.py:2351 +#: machines/models.py:2459 msgid "You don't have the right to delete a ports opening list." msgstr "Vous n'avez pas le droit de supprimer une liste d'ouverture de ports." -#: machines/models.py:2355 +#: machines/models.py:2463 msgid "This ports opening list is used." msgstr "Cette liste d'ouverture de ports est utilisée." -#: machines/models.py:2419 +#: machines/models.py:2527 msgid "ports opening" msgstr "ouverture de ports" -#: machines/models.py:2420 +#: machines/models.py:2528 msgid "ports openings" msgstr "ouvertures de ports" @@ -903,7 +913,7 @@ msgstr "Enregistrement" #: machines/templates/machines/aff_extension.html:34 #: machines/templates/machines/aff_srv.html:34 -#: machines/templates/machines/machine.html:116 +#: machines/templates/machines/machine.html:124 msgid "Extension" msgstr "Extension" @@ -983,13 +993,13 @@ msgstr "Afficher les adresses IPv6" msgid "No IPv6" msgstr "Pas d'IPv6" -#: machines/templates/machines/aff_machines.html:116 machines/views.py:291 -#: machines/views.py:406 machines/views.py:462 machines/views.py:518 -#: machines/views.py:587 machines/views.py:650 machines/views.py:716 -#: machines/views.py:768 machines/views.py:820 machines/views.py:872 -#: machines/views.py:927 machines/views.py:979 machines/views.py:1041 -#: machines/views.py:1097 machines/views.py:1149 machines/views.py:1215 -#: machines/views.py:1267 machines/views.py:1621 +#: machines/templates/machines/aff_machines.html:116 machines/views.py:202 +#: machines/views.py:315 machines/views.py:371 machines/views.py:427 +#: machines/views.py:496 machines/views.py:559 machines/views.py:625 +#: machines/views.py:677 machines/views.py:729 machines/views.py:781 +#: machines/views.py:836 machines/views.py:888 machines/views.py:950 +#: machines/views.py:1006 machines/views.py:1058 machines/views.py:1124 +#: machines/views.py:1176 machines/views.py:1530 msgid "Edit" msgstr "Modifier" @@ -1082,7 +1092,7 @@ msgstr "UDP (sortie)" #: machines/templates/machines/index_service.html:30 #: machines/templates/machines/index_sshfp.html:28 #: machines/templates/machines/index_vlan.html:30 -#: machines/templates/machines/machine.html:31 +#: machines/templates/machines/machine.html:30 msgid "Machines" msgstr "Machines" @@ -1164,7 +1174,7 @@ msgid "Expire" msgstr "Expiration" #: machines/templates/machines/aff_srv.html:32 -#: machines/templates/machines/machine.html:152 +#: machines/templates/machines/machine.html:160 msgid "Service" msgstr "Service" @@ -1434,101 +1444,97 @@ msgstr "Ajouter un VLAN" msgid "Delete one or several VLANs" msgstr "Supprimer un ou plusieurs VLANs" -#: machines/templates/machines/machine.html:92 +#: machines/templates/machines/machine.html:104 msgid "Machine" msgstr "Machine" -#: machines/templates/machines/machine.html:96 +#: machines/templates/machines/machine.html:108 msgid "Interface" msgstr "Interface" -#: machines/templates/machines/machine.html:104 +#: machines/templates/machines/machine.html:112 msgid "Domain" msgstr "Domaine" -#: machines/templates/machines/machine.html:148 +#: machines/templates/machines/machine.html:156 msgid "Alias" msgstr "Alias" -#: machines/templates/machines/machine.html:168 +#: machines/templates/machines/machine.html:176 msgid "IPv6 address" msgstr "Adresse IPv6" -#: machines/views.py:144 -msgid "Select a machine type first." -msgstr "Sélectionnez un type de machine d'abord." - -#: machines/views.py:236 +#: machines/views.py:151 msgid "The machine was created." msgstr "La machine a été créée." -#: machines/views.py:245 machines/views.py:341 machines/views.py:382 -#: machines/views.py:440 machines/views.py:495 machines/views.py:567 -#: machines/views.py:633 machines/views.py:699 machines/views.py:751 -#: machines/views.py:803 machines/views.py:855 machines/views.py:910 -#: machines/views.py:962 machines/views.py:1019 machines/views.py:1080 -#: machines/views.py:1132 machines/views.py:1198 machines/views.py:1250 +#: machines/views.py:158 machines/views.py:250 machines/views.py:291 +#: machines/views.py:349 machines/views.py:404 machines/views.py:476 +#: machines/views.py:542 machines/views.py:608 machines/views.py:660 +#: machines/views.py:712 machines/views.py:764 machines/views.py:819 +#: machines/views.py:871 machines/views.py:928 machines/views.py:989 +#: machines/views.py:1041 machines/views.py:1107 machines/views.py:1159 msgid "Add" msgstr "Ajouter" -#: machines/views.py:277 +#: machines/views.py:190 msgid "The machine was edited." msgstr "La machine a été modifiée." -#: machines/views.py:304 +#: machines/views.py:215 msgid "The machine was deleted." msgstr "La machine a été supprimée." -#: machines/views.py:331 +#: machines/views.py:242 msgid "The interface was created." msgstr "L'interface a été créée." -#: machines/views.py:357 +#: machines/views.py:266 msgid "The interface was deleted." msgstr "L'interface a été supprimée." -#: machines/views.py:377 +#: machines/views.py:286 msgid "The IPv6 addresses list was created." msgstr "La liste d'adresses IPv6 a été créée." -#: machines/views.py:398 +#: machines/views.py:307 msgid "The IPv6 addresses list was edited." msgstr "La liste d'adresses IPv6 a été modifiée." -#: machines/views.py:417 +#: machines/views.py:326 msgid "The IPv6 addresses list was deleted." msgstr "La liste d'adresses IPv6 a été supprimée." -#: machines/views.py:435 +#: machines/views.py:344 msgid "The SSHFP record was created." msgstr "L'enregistrement SSHFP a été créé." -#: machines/views.py:454 +#: machines/views.py:363 msgid "The SSHFP record was edited." msgstr "L'enregistrement SSHFP a été modifié." -#: machines/views.py:473 +#: machines/views.py:382 msgid "The SSHFP record was deleted." msgstr "L'enregistrement SSHFP a été supprimé." -#: machines/views.py:492 +#: machines/views.py:401 msgid "The IP type was created." msgstr "Le type d'IP a été créé." -#: machines/views.py:513 +#: machines/views.py:422 msgid "The IP type was edited." msgstr "Le type d'IP a été modifié." -#: machines/views.py:515 +#: machines/views.py:424 msgid "This IP type change would create duplicated domains" msgstr "" "Ce changement de type d'IP causerait des duplications de noms de domaine" -#: machines/views.py:537 +#: machines/views.py:446 msgid "The IP type was deleted." msgstr "Le type d'IP a été supprimé." -#: machines/views.py:543 +#: machines/views.py:452 #, python-format msgid "" "The IP type %s is assigned to at least one machine, you can't delete it." @@ -1536,33 +1542,33 @@ msgstr "" "Le type d'IP %s est assigné à au moins une machine, vous ne pouvez pas le " "supprimer." -#: machines/views.py:551 machines/views.py:617 machines/views.py:683 -#: machines/views.py:737 machines/views.py:789 machines/views.py:841 -#: machines/views.py:894 machines/views.py:948 machines/views.py:1000 -#: machines/views.py:1064 machines/views.py:1118 machines/views.py:1173 -#: machines/views.py:1236 machines/views.py:1288 +#: machines/views.py:460 machines/views.py:526 machines/views.py:592 +#: machines/views.py:646 machines/views.py:698 machines/views.py:750 +#: machines/views.py:803 machines/views.py:857 machines/views.py:909 +#: machines/views.py:973 machines/views.py:1027 machines/views.py:1082 +#: machines/views.py:1145 machines/views.py:1197 msgid "Delete" msgstr "Supprimer" -#: machines/views.py:564 +#: machines/views.py:473 msgid "The machine type was created." msgstr "Le type de machine a été créé." -#: machines/views.py:582 +#: machines/views.py:491 msgid "The machine type was edited." msgstr "Le type de machine a été modifié." -#: machines/views.py:584 +#: machines/views.py:493 msgid "This machine type change would create duplicated domains" msgstr "" "Ce changement de type de machine causerait des duplications de noms de " "domaines" -#: machines/views.py:603 +#: machines/views.py:512 msgid "The machine type was deleted." msgstr "Le type de machine a été supprimé." -#: machines/views.py:609 +#: machines/views.py:518 #, python-format msgid "" "The machine type %s is assigned to at least one machine, you can't delete it." @@ -1570,226 +1576,226 @@ msgstr "" "Le type de machine %s est assigné à au moins un machine, vous ne pouvez pas " "le supprimer." -#: machines/views.py:630 +#: machines/views.py:539 msgid "The extension was created." msgstr "L'extension a été créée." -#: machines/views.py:647 +#: machines/views.py:556 msgid "The extension was edited." msgstr "L'extension a été modifiée." -#: machines/views.py:666 +#: machines/views.py:575 msgid "The extension was deleted." msgstr "L'extension a été supprimée." -#: machines/views.py:672 +#: machines/views.py:581 #, python-format msgid "The extension %s is assigned to following %s : %s, you can't delete it." msgstr "" "L'extension %s est assignée aux %s suivants : %s , vous ne pouvez pas le " "supprimer." -#: machines/views.py:696 +#: machines/views.py:605 msgid "The SOA record was created." msgstr "L'enregistrement SOA a été créé." -#: machines/views.py:713 +#: machines/views.py:622 msgid "The SOA record was edited." msgstr "L'enregistrement SOA a été modifié." -#: machines/views.py:730 +#: machines/views.py:639 msgid "The SOA record was deleted." msgstr "L'enregistrement SOA a été supprimé." -#: machines/views.py:733 +#: machines/views.py:642 #, python-format msgid "Error: the SOA record %s can't be deleted." msgstr "Erreur : l'enregistrement SOA %s ne peut pas être supprimé." -#: machines/views.py:748 +#: machines/views.py:657 msgid "The MX record was created." msgstr "L'enregistrement MX a été créé." -#: machines/views.py:765 +#: machines/views.py:674 msgid "The MX record was edited." msgstr "L'enregistrement MX a été modifié." -#: machines/views.py:782 +#: machines/views.py:691 msgid "The MX record was deleted." msgstr "L'enregistrement MX a été supprimé." -#: machines/views.py:785 +#: machines/views.py:694 #, python-format msgid "Error: the MX record %s can't be deleted." msgstr "Erreur : l'enregistrement MX %s ne peut pas être supprimé." -#: machines/views.py:800 +#: machines/views.py:709 msgid "The NS record was created." msgstr "L'enregistrement NS a été créé." -#: machines/views.py:817 +#: machines/views.py:726 msgid "The NS record was edited." msgstr "L'enregistrement NS a été modifié." -#: machines/views.py:834 +#: machines/views.py:743 msgid "The NS record was deleted." msgstr "L'enregistrement NS a été supprimé." -#: machines/views.py:837 +#: machines/views.py:746 #, python-format msgid "Error: the NS record %s can't be deleted." msgstr "Erreur : l'enregistrement NS %s ne peut pas être supprimé." -#: machines/views.py:852 +#: machines/views.py:761 msgid "The DNAME record was created." msgstr "L'enregistrement DNAME a été créé." -#: machines/views.py:869 +#: machines/views.py:778 msgid "The DNAME record was edited." msgstr "L'enregistrement DNAME a été modifié." -#: machines/views.py:886 +#: machines/views.py:795 msgid "The DNAME record was deleted." msgstr "L'enregistrement DNAME a été supprimé." -#: machines/views.py:890 +#: machines/views.py:799 #, python-format msgid "Error: the DNAME record %s can't be deleted." msgstr "Erreur : l'enregistrement DNAME %s ne peut pas être supprimé." -#: machines/views.py:907 +#: machines/views.py:816 msgid "The TXT record was created." msgstr "L'enregistrement TXT a été créé." -#: machines/views.py:924 +#: machines/views.py:833 msgid "The TXT record was edited." msgstr "L'enregistrement TXT a été modifié." -#: machines/views.py:941 +#: machines/views.py:850 msgid "The TXT record was deleted." msgstr "L'enregistrement TXT a été supprimé." -#: machines/views.py:944 +#: machines/views.py:853 #, python-format msgid "Error: the TXT record %s can't be deleted." msgstr "Erreur : l'enregistrement %s ne peut pas être supprimé." -#: machines/views.py:959 +#: machines/views.py:868 msgid "The SRV record was created." msgstr "L'enregistrement SRV a été créé." -#: machines/views.py:976 +#: machines/views.py:885 msgid "The SRV record was edited." msgstr "L'enregistrement SRV a été modifié." -#: machines/views.py:993 +#: machines/views.py:902 msgid "The SRV record was deleted." msgstr "L'enregistrement SRV a été supprimé." -#: machines/views.py:996 +#: machines/views.py:905 #, python-format msgid "Error: the SRV record %s can't be deleted." msgstr "Erreur : l'enregistrement SRV %s ne peut pas être supprimé." -#: machines/views.py:1014 +#: machines/views.py:923 msgid "The alias was created." msgstr "L'alias a été créé." -#: machines/views.py:1033 +#: machines/views.py:942 msgid "The alias was edited." msgstr "L'alias a été modifié." -#: machines/views.py:1055 +#: machines/views.py:964 #, python-format msgid "The alias %s was deleted." msgstr "L'alias %s a été supprimé." -#: machines/views.py:1058 +#: machines/views.py:967 #, python-format msgid "Error: the alias %s can't be deleted." msgstr "Erreur : l'alias %s ne peut pas être supprimé." -#: machines/views.py:1077 +#: machines/views.py:986 msgid "The role was created." msgstr "Le rôle a été créé." -#: machines/views.py:1094 +#: machines/views.py:1003 msgid "The role was edited." msgstr "Le rôle a été modifié." -#: machines/views.py:1111 +#: machines/views.py:1020 msgid "The role was deleted." msgstr "Le rôle a été supprimé." -#: machines/views.py:1114 +#: machines/views.py:1023 #, python-format msgid "Error: the role %s can't be deleted." msgstr "Erreur : le rôle %s ne peut pas être supprimé." -#: machines/views.py:1129 +#: machines/views.py:1038 msgid "The service was created." msgstr "Le service a été créé." -#: machines/views.py:1146 +#: machines/views.py:1055 msgid "The service was edited." msgstr "Le service a été modifié." -#: machines/views.py:1165 +#: machines/views.py:1074 msgid "The service was deleted." msgstr "Le service a été supprimé." -#: machines/views.py:1169 +#: machines/views.py:1078 #, python-format msgid "Error: the service %s can't be deleted." msgstr "Erreur : le service %s ne peut pas être supprimé." -#: machines/views.py:1195 +#: machines/views.py:1104 msgid "The VLAN was created." msgstr "Le VLAN a été créé." -#: machines/views.py:1212 +#: machines/views.py:1121 msgid "The VLAN was edited." msgstr "Le VLAN a été modifié." -#: machines/views.py:1229 +#: machines/views.py:1138 msgid "The VLAN was deleted." msgstr "Le VLAN a été supprimé." -#: machines/views.py:1232 +#: machines/views.py:1141 #, python-format msgid "Error: the VLAN %s can't be deleted." msgstr "Erreur : le VLAN %s ne peut pas être supprimé." -#: machines/views.py:1247 +#: machines/views.py:1156 msgid "The NAS device was created." msgstr "Le dispositif NAS a été créé." -#: machines/views.py:1264 +#: machines/views.py:1173 msgid "The NAS device was edited." msgstr "Le dispositif NAS a été modifié." -#: machines/views.py:1281 +#: machines/views.py:1190 msgid "The NAS device was deleted." msgstr "Le dispositif NAS a été supprimé." -#: machines/views.py:1284 +#: machines/views.py:1193 #, python-format msgid "Error: the NAS device %s can't be deleted." msgstr "Erreur : le dispositif NAS %s ne peut pas être supprimé." -#: machines/views.py:1547 +#: machines/views.py:1456 msgid "The ports list was edited." msgstr "La liste de ports a été modifiée." -#: machines/views.py:1561 +#: machines/views.py:1470 msgid "The ports list was deleted." msgstr "La liste de ports a été supprimée." -#: machines/views.py:1586 +#: machines/views.py:1495 msgid "The ports list was created." msgstr "La liste de ports a été créée." -#: machines/views.py:1607 +#: machines/views.py:1516 msgid "" "Warning: the IP address is not public, the opening won't have any effect in " "v4." @@ -1797,6 +1803,9 @@ msgstr "" "Attention : l'adresse IP n'est pas publique, l'ouverture n'aura pas d'effet " "en v4." -#: machines/views.py:1618 +#: machines/views.py:1527 msgid "The ports configuration was edited." msgstr "La configuration de ports a été modifiée." + +#~ msgid "Select a machine type first." +#~ msgstr "Sélectionnez un type de machine d'abord."