...
 
Commits (81)
......@@ -24,6 +24,8 @@ sont nécessaires :
* python-dateutil
* python-tz
* python-netaddr
* python-dialog
* python-openssl
Pour une installation facile, copier-coller cette liste dans la commande :
`sudo apt-get install $(sed 's/ \* //')`
......
......@@ -100,7 +100,7 @@ def liste_charte_nok():
liste_nok = []
for adh in liste_actifs:
if (len([droit for droit in adh['droits']
if droit not in ['Multimachines', 'Webradio']]) > 0
if droit not in ['Multimachines',]]) > 0
and not adh['charteMA']):
liste_nok.append(adh)
return liste_nok
......
......@@ -156,6 +156,8 @@ def get_machines(data, conn, is_wifi=True, proprio=None):
# ** Case 1: Search by mac
res = conn.search(u'(&%s(macAddress=%s))' % (base, mac))
if res:
if is_wifi and bool(username not in res[0]['host'][0].value):
logger.warn(u"(wifi) La mac enregistrée en bdd et la mac client ne correspondent pas, machine déjà enregistrée ?".encode('utf-8'))
return res
# Si proprio fourni, on ne cherche désormais que parmi ses machines
......
......@@ -36,13 +36,15 @@ def _need_conn(f):
time.sleep(delay)
conn = psycopg2.connect(user='crans_ro', database='django',
host=host)
if conn.status != psycopg2.extensions.STATUS_IN_TRANSACTION:
conn.set_session(autocommit=True)
return f(*args, **kwargs)
except psycopg2.OperationalError:
attempts += 1
conn = None # Connexion morte, on recommence à zéro
if attempts > retries:
def_failed = True
raise NameError
raise NameError("Trop d'erreur de connection %i tentatives sur %i" % (attempts, retries))
# Les scripts appelant annuaires_pg n'ont pas à connaître le
# backend pgsql. On utilise donc une exception plus standard
return first_connect
......@@ -144,18 +146,19 @@ def is_connected(batiment, chambre):
# Prises d'uplink, de machines du crans / Prises d'utilité CRANS
uplink_prises={ 'a' :
{ 49 : 'uplink->bata-4', 50 : 'libre-service',
149 : 'uplink->bata-4', 150 : 'libre-service',
225 : 'uplink->bata-4', 226 : 'libre-service',
325 : 'uplink->bata-4', 326 : 'libre-service',
401 : 'uplink->bata-0', 402 : 'uplink->bata-1',
403 : 'uplink->bata-2', 404 : 'uplink->bata-3',
424 : 'uplink->backbone' },
{ 49 : 'uplink->bata-2', 50 : 'libre-service',
149 : 'uplink->bata-2', 150 : 'libre-service',
424 : 'uplink->bata-2', 423 : 'libre-service',
325 : 'uplink->bata-2', 326 : 'libre-service',
201 : 'uplink->bata-0', 202 : 'uplink->bata-1',
203 : 'uplink->bata-4', 204 : 'uplink->bata-3',
224 : 'uplink->backbone',
},
'b' :
{ 49 : 'uplink->batb-4', 50 : 'libre-service',
149 : 'uplink->batb-4', 150 : 'libre-service',
249 : 'uplink->batb-4', 250 : 'libre-service', # 249 morte ?! (olasd 21/01/2010)
349 : 'uplink->batb-4', 350 : 'libre-service',
{ 49 : 'libre-service', 50 : 'uplink->batb-4',
149 : 'libre-service', 150 : 'uplink->batb-4',
249 : 'libre-service', 250 : 'uplink->batb-4', # 249 morte ?! (olasd 21/01/2010)
349 : 'libre-service', 350 : 'uplink->batb-4',
401 : 'uplink->batb-0', 402 : 'uplink->batb-1',
403 : 'uplink->batb-2', 404 : 'uplink->batb-3',
405 : 'uplink->backbone',
......@@ -164,7 +167,7 @@ uplink_prises={ 'a' :
'c' :
{ 49 : 'uplink->batc-3', 50 : 'libre-service',
149 : 'uplink->batc-3', 150 : 'libre-service',
225 : 'uplink->batc-3', 226 : 'libre-service',
224 : 'uplink->batc-3',
301 : 'uplink->batc-0', 302 : 'uplink->batc-1',
304 : 'uplink->batc-4',
303 : 'uplink->batc-2', 324 : 'uplink->backbone',
......@@ -177,33 +180,29 @@ uplink_prises={ 'a' :
149 : 'uplink->batg-8', 150 : 'libre-service',
249 : 'uplink->batg-8', 250 : 'uplink->batg-3',
325 : 'uplink->batg-8', 326 : 'libre-service',
449 : 'uplink->batg-9', 450 : 'uplink->batg-5',
247 : 'uplink->batg-8',
549 : 'uplink->batg-9', 550 : 'uplink->batg-6',
449 : 'uplink->batg-9', 450 : 'libre-service',
649 : 'uplink->batg-9', 650 : 'uplink->batg-5',
549 : 'uplink->batg-9', 550 : 'libre-service',
725 : 'uplink->batg-9', 726 : 'libre-service',
649 : 'uplink->batg-9', 650 : 'libre-service',
801 : 'uplink->batg-1', 802 : 'uplink->batg-2',
803 : 'uplink->batg-3', 821 : 'uplink->batg-0',
825 : 'uplink->batg-0',
823 : 'uplink->batg-9',
901 : 'uplink->batg-4', 902 : 'uplink->batg-5',
903 : 'uplink->batg-6', 904 : 'uplink->batg-7',
921 : 'uplink->batg-8',
903 : 'uplink->batg-6', 904 : 'uplink->batg-8',
},
'h' :
{ 49 : 'uplink->bath-3', 50 : 'libre-service',
149 : 'uplink->bath-3', 150 : 'libre-service',
225 : 'uplink->bath-3', 226 : 'libre-service',
301 : 'uplink->bath-0', 302 : 'uplink->bath-1',
303 : 'uplink->bath-2', 328 : 'uplink->backbone' },
{ 49 : 'uplink->bath-2', 50 : 'libre-service',
149 : 'uplink->bath-2', 150 : 'libre-service',
219 : 'uplink->bath-0', 221 : 'uplink->bath-1',
222 : 'uplink->bath-3', 223 : 'uplink->backbone',
224 : 'libre-service',
303 : 'uplink->bath-2' },
'i' :
{ 49 : 'uplink->bati-3', 50 : 'libre-service',
149 : 'uplink->bati-3', 150 : 'libre-service',
......@@ -212,7 +211,7 @@ uplink_prises={ 'a' :
'j' :
{ 49 : 'uplink->batj-3', 50 : 'libre-service',
149 : 'uplink->batj-3', 150 : 'libre-service', # XXX: 150 semble morte
225 : 'uplink->batj-3', 226 : 'libre-service',
223 : 'uplink->batj-3', 224 : 'libre-service',
328 : 'uplink->backbone',
301 : 'uplink->batj-0', 303 : 'uplink->batj-1',
305 : 'uplink->batj-2', 307 : 'uplink->batj-4',
......@@ -231,10 +230,10 @@ uplink_prises={ 'a' :
549 : 'libre-service', 550 : 'uplink->batm-7',
650 : 'uplink->batm-7',
726 : 'libre-service', 728 : 'libre-service',
727 : 'libre-service',
747 : 'libre-service', 750 : 'libre-service',
751 : 'libre-service', 752 : 'libre-service',
725 : 'uplink->backbone', 720 : 'uplink->batm-0',
749 : 'uplink->backbone', 720 : 'uplink->batm-0',
719 : 'uplink->batm-1', 718 : 'uplink->batm-2',
717 : 'uplink->batm-3', 716 : 'uplink->batm-4',
715 : 'uplink->batm-5', 714 : 'uplink->batm-6',
......
......@@ -89,8 +89,8 @@ club_gid = 600
mailgroup = 8
default_rights = 0755
default_mail_rights = 0700
quota_soft = 8000000
quota_hard = 10000000
quota_soft = 10000000
quota_hard = 12000000
fquota_soft = 0
fquota_hard = 0
# Shell
......@@ -178,9 +178,6 @@ static_users_groups = {
'logcheck',
'arpwatch',
],
'webradio': [
'webradio',
],
}
# Quels droits donnent l'appartenance à quel groupe Unix ?
......@@ -218,9 +215,6 @@ droits_groupes = {
'webadm' : [
u'Webmaster',
],
'webradio' : [
u'Webradio',
],
'mailing' : {
u'Nounou',
u'Bureau',
......@@ -286,7 +280,7 @@ droits_mailing_listes = {
'tresorier' : [
u'Tresorier',
],
'apprentis' : [
'+apprentis' : [
u'Apprenti',
],
'+ca' : [
......@@ -316,9 +310,6 @@ droits_mailing_listes = {
u'Nounou',
u'Bureau',
],
'+wrc' : [
u'Webradio',
],
'+saclay' : [
u'Bureau',
],
......@@ -534,6 +525,8 @@ rid_machines_speciales = {
4097: '91.121.84.138',
# soyouz.crans.org
4098: '91.121.179.40',
# radius1-federez.crans.org
4099: '62.210.81.204',
}
ipv6_machines_speciales = {
......@@ -543,6 +536,8 @@ ipv6_machines_speciales = {
4097: '2001:41d0:1:898a::1',
# soyouz
4098: '2001:41d0:1:f428::1',
# radius1
4099: '2001:bc8:273e::',
}
# Les préfixes ipv6 publics
......@@ -820,6 +815,24 @@ accueil_route = {
'ocsp.cacert.org',
],
},
'46.255.53.35' : {
'tcp' : [
'80',
'443',
],
'hosts' : [
'secure.comnpay.com',
],
},
'46.255.53.17' : {
'tcp' : [
'80',
'443',
],
'hosts' : [
'comnpay.com',
],
},
}
dhcp_servers = ['dhcp.adm.crans.org', 'sable.adm.crans.org']
......
......@@ -118,19 +118,19 @@ zones_reverse_v6 = config.prefix['fil'] + config.prefix['wifi'] + config.prefix[
#: Serveurs DNS récursifs :
recursiv = {
'fil' : [
'138.231.136.98',
'138.231.136.160',
'138.231.136.152',
],
'wifi' : [
'138.231.136.98',
'138.231.148.160',
'138.231.136.152',
],
'evenementiel' : [
'138.231.136.98',
'138.231.136.160',
'138.231.136.152',
],
'adm' : [
'10.231.136.98',
'10.231.136.160',
'10.231.136.152',
],
'gratuit' : [
......@@ -143,12 +143,11 @@ recursiv = {
'10.52.0.10',
],
'personnel-ens' : [
'10.2.9.10',
'138.231.136.98',
'10.2.9.160',
'138.231.136.152',
],
'federez' : [
'138.231.136.98',
'10.53.0.160',
'138.231.136.152',
],
}
......
......@@ -12,37 +12,37 @@ ITEMS = {
'designation': u'Cable Ethernet 5m',
'pu': 3.,
},
'ADAPTATEUR_TrendNet': {
'designation': u'Adaptateur 10/100 Ethernet/USB-2',
'pu': 17.,
},
'ADAPTATEUR_UGreen_USB_2.0': {
'designation': u'Adaptateur 10/100 Ethernet/USB-2',
'pu': 7.5,
'pu': 12,
},
'ADAPTATEUR_UGreen_USB_3.0': {
'designation': u'Adaptateur 10/100/1000 Ethernet/USB-3',
'pu': 12.,
'pu': 16.,
},
'RELIURE': {
'designation': u'Reliure plastique',
'pu': 0.12,
},
'PULL_ZIP_MARK': {
'designation': u'Zipper marqué',
'pu': 39.18,
},
'PULL_ZIP': {
'designation': u'Zipper non marqué',
'pu': 35.8,
},
'PULL_MARK': {
'designation': u'Sweat à capuche marqué',
'pu': 32.28,
},
'PULL': {
'designation': u'Sweat à capuche non marqué',
'pu': 28.92,
# 'PULL_ZIP_MARK': {
# 'designation': u'Zipper marqué',
# 'pu': 39.18,
# },
# 'PULL_ZIP': {
# 'designation': u'Zipper non marqué',
# 'pu': 35.8,
# },
# 'PULL_MARK': {
# 'designation': u'Sweat à capuche marqué',
# 'pu': 32.28,
# },
# 'PULL': {
# 'designation': u'Sweat à capuche non marqué',
# 'pu': 28.92,
# },
'ROUTEUR_TPLINK': {
'designation': u'Routeur TPLink',
'pu': 17.00,
},
}
......
......@@ -69,18 +69,18 @@ HP_PROCURVE_MAP = {
},
"J9021" : {
'model' : "HP 2810",
'firmware' : "N.11.76",
'firmware' : "N.11.78",
'features' : [GIGABIT],
},
"J9085" : {
'model' : "HP 2610",
'firmware' : "R.11.119",
'firmware' : "R.11.121",
'features' : [IGMP_SNOOPING, DHCP_SNOOPING],
'sfp' : range(27, 29),
},
"J9088" : {
'model' : "HP 2610",
'firmware' : "R.11.119",
'firmware' : "R.11.121",
'features' : [IGMP_SNOOPING, DHCP_SNOOPING],
'sfp' : range(51, 53),
},
......@@ -97,7 +97,7 @@ HP_PROCURVE_MAP = {
},
"J9623" : {
'model' : "HP 2620",
'firmware' : "RA.16.04.0008",
'firmware' : "RA.16.04.0009",
'features' : [
IPv6_MGMT, DHCP_SNOOPING, DHCPv6_SNOOPING, RA_GUARD,
MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX, RADIUS_DAE,
......@@ -106,7 +106,7 @@ HP_PROCURVE_MAP = {
},
"J9624" : {
'model' : "HP 2620",
'firmware' : "RA.16.04.0008",
'firmware' : "RA.16.04.0009",
'features' : [
IPv6_MGMT, POE, DHCP_SNOOPING, DHCPv6_SNOOPING,
RA_GUARD, MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX,
......@@ -117,7 +117,7 @@ HP_PROCURVE_MAP = {
},
"J9626" : {
'model' : "HP 2620",
'firmware' : "RA.16.04.0008",
'firmware' : "RA.16.04.0009",
'features' : [
IPv6_MGMT, DHCP_SNOOPING, DHCPv6_SNOOPING, RA_GUARD,
MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX, RADIUS_DAE,
......@@ -126,7 +126,7 @@ HP_PROCURVE_MAP = {
},
"J9727" : {
'model' : "HP 2920",
'firmware' : "WB.16.04.0008",
'firmware' : "WB.16.04.0009",
'features' : [
IPv6_MGMT, POE, DHCP_SNOOPING, DHCPv6_SNOOPING,
RA_GUARD, MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX,
......@@ -138,50 +138,53 @@ HP_PROCURVE_MAP = {
},
"J9772" : {
'model' : "HP 2530",
'firmware' : "YA.16.04.0008",
'firmware' : "YA.16.04.0009",
'features' : [
IPv6_MGMT, POE, DHCP_SNOOPING, DHCPv6_SNOOPING,
RA_GUARD, SNTP_NEW_SYNTAX, GIGABIT, RADIUS_DAE,
FILTER_MDNS,
RA_GUARD, MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX,
GIGABIT, RADIUS_DAE, FILTER_MDNS,
],
'sfp' : range(49, 53),
'poe' : range(1, 53),
},
"J9773" : {
'model' : "HP 2530",
'firmware' : "YA.16.04.0008",
'firmware' : "YA.16.04.0009",
'features' : [
IPv6_MGMT, POE, DHCP_SNOOPING, DHCPv6_SNOOPING,
RA_GUARD, SNTP_NEW_SYNTAX, GIGABIT, RADIUS_DAE,
FILTER_MDNS,
RA_GUARD, MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX,
GIGABIT, RADIUS_DAE, FILTER_MDNS,
],
'sfp' : range(25, 29),
'poe' : range(1, 25),
},
"J9775" : {
'model' : "HP 2530",
'firmware' : "YA.16.04.0008",
'firmware' : "YA.16.04.0009",
'features' : [
IPv6_MGMT, DHCP_SNOOPING, DHCPv6_SNOOPING, RA_GUARD,
SNTP_NEW_SYNTAX, GIGABIT, RADIUS_DAE, FILTER_MDNS,
MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX, GIGABIT,
RADIUS_DAE, FILTER_MDNS,
],
'sfp' : range(49, 53),
},
"J9776" : {
'model' : "HP 2530",
'firmware' : "YA.16.04.0008",
'firmware' : "YA.16.04.0009",
'features' : [
IPv6_MGMT, DHCP_SNOOPING, DHCPv6_SNOOPING, RA_GUARD,
SNTP_NEW_SYNTAX, GIGABIT, RADIUS_DAE, FILTER_MDNS,
MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX, GIGABIT,
RADIUS_DAE, FILTER_MDNS,
],
'sfp' : range(25, 29),
},
"J9777" : {
'model' : "HP 2530",
'firmware' : "YA.16.04.0008",
'firmware' : "YA.16.04.0009",
'features' : [
IPv6_MGMT, DHCP_SNOOPING, DHCPv6_SNOOPING, RA_GUARD,
SNTP_NEW_SYNTAX, GIGABIT, RADIUS_DAE, FILTER_MDNS,
MLD_SNOOPING, IGMP_SNOOPING, SNTP_NEW_SYNTAX, GIGABIT,
RADIUS_DAE, FILTER_MDNS,
],
'sfp' : range(9, 11),
},
......
......@@ -10,6 +10,7 @@ non_sites_auto = {
u"discourse.crans.org",
u"diplome.crans.org",
u"grafana.crans.org",
u"imprimante.crans.org",
}
max_upload = {
......@@ -28,7 +29,7 @@ sites_redirect = {
"factures.crans.org": "https://intranet.crans.org/factures",
"accounts.crans.org": "https://intranet.crans.org/compte",
"intranet2.crans.org": "https://intranet.crans.org",
"autostatus.crans.org": "https://www.crans.org/CransNounous/AutoStatus",
"autostatus.crans.org": "https://wiki.crans.org/CransNounous/AutoStatus",
"wikipedia.crans.org": "https://wiki.crans.org",
"crans.org": "https://www.crans.org",
"install-party.ens-cachan.fr": "https://install-party.crans.org",
......@@ -70,7 +71,15 @@ site_template = """server {
server_name %(serveur)s;
include "snippets/proxy-common.conf";
return 302 https://$host$request_uri;
location / {
return 302 https://$host$request_uri;
}
# On redirige tout ce qui concerne le challenge letsencrypt vers le meme dossier
# pour pouvoir utiliser le plugin webroot de letsencrypt
location /.well-known/acme-challenge {
alias /usr/share/nginx/html/.well-known/acme-challenge;
}
}
server {
......@@ -89,6 +98,12 @@ server {
proxy_set_header X-Forwarded-For $remote_addr;
}
# On redirige tout ce qui concerne le challenge letsencrypt vers le meme dossier
# pour pouvoir utiliser le plugin webroot de letsencrypt
location /.well-known/acme-challenge {
alias /usr/share/nginx/html/.well-known/acme-challenge;
}
}
"""
......@@ -96,7 +111,15 @@ site_redirect_template = """server {
server_name %(serveur)s;
include "snippets/proxy-common.conf";
return 302 %(redirect)s$request_uri;
# On redirige tout ce qui concerne le challenge letsencrypt vers le meme dossier
# pour pouvoir utiliser le plugin webroot de letsencrypt
location /.well-known/acme-challenge {
alias /usr/share/nginx/html/.well-known/acme-challenge;
}
location / {
return 302 %(redirect)s$request_uri;
}
}
server {
......@@ -107,6 +130,14 @@ server {
ssl_certificate_key /etc/letsencrypt/live/%(cert_name)s/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/%(cert_name)s/chain.pem;
return 302 %(redirect)s$request_uri;
# On redirige tout ce qui concerne le challenge letsencrypt vers le meme dossier
# pour pouvoir utiliser le plugin webroot de letsencrypt
location /.well-known/acme-challenge {
alias /usr/share/nginx/html/.well-known/acme-challenge;
}
location / {
return 302 %(redirect)s$request_uri;
}
}
"""
......@@ -3,7 +3,9 @@
""" Format lisible et importable par la macro wiki des tarifs d'impression """
import impression
# Je ne veux pas me prendre la tête à faire un import relatif foireux
# (import impression a des chances d'importer /usr/scripts/impression à la place)
import gestion.config.impression as impression
tarifs = {
u"Coût d'un recto A4 couleurs" : impression.c_a4 + impression.c_face_couleur,
......
......@@ -315,7 +315,7 @@ class Dialog(proprio.Dialog):
try:
if adhesion and not connexion:
self.dialog.msgbox(
text=u"Adhésion effectué avec success",
text=u"Adhésion effectué avec succès",
title=u"Adhésion terminé",
width=0,
height=0,
......@@ -323,7 +323,7 @@ class Dialog(proprio.Dialog):
)
elif not adhesion and connexion:
self.dialog.msgbox(
text=u"Connexion prolongée avec success",
text=u"Connexion prolongée avec succès",
title=u"Connexion prolongée",
width=0,
height=0,
......@@ -331,7 +331,7 @@ class Dialog(proprio.Dialog):
)
elif adhesion and connexion:
self.dialog.msgbox(
text=u"Adhésion effectué et connexion prolongée avec success",
text=u"Adhésion effectué et connexion prolongée avec succès",
title=u"Connexion & Adhésion",
width=0,
height=0,
......
......@@ -39,7 +39,7 @@ class Dialog(certificat.Dialog, blacklist.Dialog):
"""
a = attributs
# Quel sont les attributs ldap dont on veut afficher et la taille du champs d'édition correspondant
to_display = [(a.host, 40),
to_display = [(a.host, 50),
(a.macAddress, 17),
(a.ipHostNumber, 15)]
......
......@@ -1293,7 +1293,9 @@ Repasser le solde à 0€ pour supprimer le compte.""" % proprio.get('solde', [0
else:
attrs = {}
# Creation de compte crans par défault
input_type[attributs.mail] = 1
make_compte_crans = True
to_display.append((attributs.mailExt, 50))
if sorte != "club":
while True:
(code, results) = self.dialog.form(
......
......@@ -198,34 +198,6 @@ class home:
import traceback
traceback.print_exc()
class mail_bienvenue:
debug = True
def __init__(self, mails):
self.mails = mails
def reconfigure(self):
cprint(u'Envoi mail de bienvenue', 'gras')
for mail in self.mails:
anim('\t' + mail)
try:
From = "respbats@crans.org"
To = mail
if '@crans.org' in To:
if not os.path.exists("/home/" + To.replace('@crans.org','')):
print ERREUR
continue
conn=smtplib.SMTP('localhost')
#conn.sendmail(From, To, mail_module.generate('bienvenue', { 'From': From, 'To': To, 'lang_info': 'English version below' }).as_string())
conn.quit()
print OK
except Exception, c:
print ERREUR
if True: #self.debug:
import traceback
traceback.print_exc()
class mail_ajout_droits:
debug = True
......
......@@ -688,6 +688,11 @@ class dns(gen_config):
DS('wifi', '50641 8 2 BF948AF7FD43E05DB4DA1FD9DD7C2B26C36D03BA68D3A48BD41A94294F6A9022'),
DS('tv', '63250 8 2 035D503EF97D4C6774F171DC28284E1BA5AD45B9451131968FC9CCB60900A8C0'),
DS('switches', '57859 8 2 49EC1D08E6C84981F7AF03D57ED30817863E3B876BCC85AFB52CDF087E80A7C1'),
DS('adm','52282 8 2 5B8463B9BBCFF81D7C782E8E438478D3EEB6BF6EBA309A3F6AF6FE201DB72E3C'),
DS('wifi', '34264 8 2 7C148A0799C0201F9985CDF9565592BA65EC3C9C52AC7B4522BAB3B1E1D11931'),
DS('tv', '23824 8 2 55D7B7EEC3710D256EA8F6DDF2696929EA3301D9E82F3AA68D571F324086756B'),
DS('switches', '18829 8 2 3C152C0415C3ED7BA923345929A23516157FC0898DA3267B121899568ACB78FA'),
DS('adm','52282 8 2 5B8463B9BBCFF81D7C782E8E438478D3EEB6BF6EBA309A3F6AF6FE201DB72E3C'),
],
'1.0.2.4.0.e.6.0.a.2.ip6.arpa' : [
DS('4.0.0.0.0.0', '57820 8 2 F273312970FE6BE790BAB5CBB8D59C3A692B5961917A05C4479BEBA3911CF20A'),
......
......@@ -90,7 +90,11 @@ class dhcp(gen_config) :
######################################PARTIE DE CONFIGURATION
# Fichier à écire
if hostname in services.get('isc-dhcp-server', []):
restart_cmd = '/usr/bin/monit restart isc-dhcp-server'
# Pas besoin de restart le service, car les mises à jours se font
# déjà via omapi en revanche, il est quand-même utile d'écrire les
# nouvelles versions des fichiers de lease en cas de reboot
restart_cmd = ''
# restart_cmd = '/usr/bin/monit restart isc-dhcp-server'
reseaux = { '138.231.136.0/21' : '/etc/dhcp3/generated/adherents.liste',
'10.42.0.0/16' : '/etc/dhcp3/generated/gratuit.liste',
'10.2.9.0/24' : '/etc/dhcp3/generated/appartements.liste',
......
......@@ -60,10 +60,6 @@ class droits_ldap(CransLdap, droits):
# Ajout de logcheck et d'arpwatch
data['memberUid'].append('logcheck')
data['memberUid'].append('arpwatch')
elif group == 'webradio':
# Ajout de michel et webradio
data['memberUid'].append('michel')
data['memberUid'].append('webradio')
# Sauvegarde
modlist = ldap.modlist.modifyModlist(init_data,data)
......
......@@ -154,6 +154,12 @@ class base_reconfigure:
self.__real_fw = firewall()
return self.__real_fw
def _fw6(self):
if not hasattr(self, '__real_fw6'):
from firewall6 import restart
self.__real_fw6 = restart
return self.__real_fw6
def macip(self, ips):
if self.__service_develop.get('macip', []):
cprint(u"Mise a jour correspondance MAC-IP", 'gras')
......@@ -199,19 +205,13 @@ class owl(base_reconfigure):
self._do(del_user(args))
class ipv6(base_reconfigure):
def __fw6(self):
if not hasattr(self, '__real_fw6'):
from firewall6 import Update
self.__real_fw6 = Update()
return self.__real_fw6
def ports(self, ips):
self._fw().filtrage_ports_maj(ips)
#self.__fw6().ports(map(self.midt.from_ipv4, ips), 6)
#self._fw6().ports(map(self.midt.from_ipv4, ips), 6)
def blacklist(self, ips):
self._fw().blacklist_maj(ips)
self.__fw6().blacklist(6)
self._fw6()
class odlyd(base_reconfigure):
# def filtrage_exemptions(self):
......@@ -240,7 +240,7 @@ class zamok(base_reconfigure):
def blacklist(self, ips):
self._fw().blacklist_maj(ips)
self.__fw6().blacklist(6)
self._fw6()
class zbee(base_reconfigure):
def home(self, args):
......@@ -252,10 +252,6 @@ class zbee(base_reconfigure):
from adherents import del_user
self._do(del_user(args))
def mail_bienvenue(self, mails):
from adherents import mail_bienvenue
self._do(mail_bienvenue(mails))
class fy(base_reconfigure):
def autostatus(self):
from autostatus import autostatus
......
......@@ -18,7 +18,7 @@ OWN_IP="$1"
/etc/init.d/nfs-kernel-server stop
# Définitions spécifiques à Debian
DEBIAN_DISTS="wheezy jessie"
DEBIAN_DISTS="wheezy jessie stretch"
DEBIAN_ARCHS="i386 amd64"
DEBIAN_FTP="ftp://ftp.crans.org/debian/dists"
......@@ -43,6 +43,6 @@ CENTOS_ARCHS="i386 x86_64"
CENTOS_FTP="ftp://mirror.in2p3.fr/pub/linux/CentOS"
## Définitions spécifiques à Fedora
FEDORA_DISTS="23 24 25"
FEDORA_DISTS="24 25"
FEDORA_ARCHS="i386 x86_64"
FEDORA_FTP="ftp://ftp.free.fr/mirrors/fedora.redhat.com/fedora/linux/"
......@@ -14,9 +14,7 @@ import sys
import os
from gestion.config import ISCSI_MAP_FILE
def getname(device, baie):
map_file = ISCSI_MAP_FILE % (baie,)
def getname(device):
if not device.isalpha():
block = "".join([i for i in device if i.isalpha()])
part = "_part" + device.replace(block, "")
......@@ -34,6 +32,8 @@ def getname(device, baie):
print >>sys.stderr, u"périphérique invalide"
sys.exit(1)
map_file = ISCSI_MAP_FILE % ("nols",)
if not os.access(map_file, os.R_OK):
print >>sys.stderr, u"Impossible de lire le fichier de mapping(%s)" % map_file
sys.exit(1)
......
......@@ -31,7 +31,7 @@ def store_iscsi_volumes():
baie = "slon"
device = os.readlink(PATH+line) # de la forme ../../sdb42
device = device.rsplit('/', 1)[1]
symlink = 'iscsi_' + ugin.getname(device, baie)
symlink = 'iscsi_' + ugin.getname(device)
if line.rsplit('-', 1)[1][0:4] == "part":
lun = line.rsplit('-', 2)[1]
else:
......
......@@ -118,12 +118,12 @@ blacklist_items = config.blacklist_items
##################################################################################
### Droits possibles
droits_possibles = [u'Multimachines', u'Cableur', u'Imprimeur', u'Apprenti',
u'Webmaster', u'Moderateur', u'Webradio',
u'Webmaster', u'Moderateur',
u'Nounou', u'Tresorier', u'Bureau', u'Ancien',u'President',u'Rtc']
##################################################################################
### Droits critiques, ie que seules les nounous peuvent attribuer
droits_critiques = [u'Nounou', u'Apprenti', u'Webradio', u'Ancien',u'Rtc',u'President']
droits_critiques = [u'Nounou', u'Apprenti', u'Ancien', u'Rtc', u'President', u'Webmaster']
##################################################################################
### Droits vieux, ie qui permettent d'avoir des droits meme quand on ne
......
#!/bin/bash /usr/scripts/python.sh
# -*- mode: python; coding: utf-8 -*-
import sys
import smtplib
from gestion import config
from gestion.affich_tools import cprint
from gestion import mail
import time
import lc_ldap.shortcuts
import lc_ldap.crans_utils as crans_utils
from utils.sendmail import actually_sendmail
import locale
locale.setlocale(locale.LC_ALL, '')
# Attention, si à True envoie effectivement les mails
SEND=('--do-it' in sys.argv)
# Prévisualisation
PREV=('--prev' in sys.argv)
ldap_filter=u"(&(finAdhesion>=%(date)s)(aid=*))" % {'date': crans_utils.to_generalized_time_format(time.time())}
#ldap_filter=u"(uid=jacomme)"
conn=lc_ldap.shortcuts.lc_ldap_readonly()
mailaddrs=set()
for adh in conn.search(ldap_filter, sizelimit=2000):
if 'canonicalAlias' in adh.attrs.keys():
mailaddrs.add(str(adh['canonicalAlias'][0]))
elif 'mail' in adh.attrs.keys():
mailaddrs.add(str(adh['mail'][0]))
elif 'uid' in adh.attrs.keys():
mailaddrs.add(str(adh['uid'][0]) + '@crans.org')
else:
raise ValueError("%r has nor mail nor canonicalAlias, only %s" % (adh, adh.attrs.keys()))
echecs=[]
From = 'ca@crans.org'
for To in mailaddrs:
cprint(u"Envoi du mail à %s" % To)
mailtxt=mail.generate('cooptation', {'To':To, 'From': From})
if PREV:
print mailtxt.as_string()
try:
if SEND:
actually_sendmail('respbats@crans.org', (To,), mailtxt)
cprint(" Envoyé !")
else:
cprint(" (simulé)")
except:
cprint(u"Erreur lors de l'envoi à %s " % To, "rouge")
echecs.append(To)
if echecs:
print "\nIl y a eu des erreurs :"
print echecs
......@@ -91,7 +91,7 @@ def warn(mail_conn, adh):
fin = compute_fin_connexion(adh)
delai = (fin - datetime.datetime.now(pytz.UTC)).days
data = {
'delai': delai,
'delai': delai + 1,
'adh': adh,
}
for l in fields:
......
......@@ -33,14 +33,26 @@ def mail_sender(template, From, ldap_filter, recipientfile=None):
else:
# Récupère les mails des adhérents donnés par le filtre.
for adh in conn.search(ldap_filter, sizelimit=2000):
mailaddrs.add(adh.get_mail())
mail = adh.get_mail()
if mail:
mailaddrs.add(mail)
else:
if not SEND:
cprint("No mail known for %s %s" % \
(adh["prenom"][0], adh["nom"][0]),
'rouge'
)
echecs = []
if PREV:
print "Envoi simulé"
print "%d destinataires (Ctrl + C pour annuler l'envoi)" %len(mailaddrs)
raw_input("Envoyer ? (Ret pour envoyer)")
try:
print "%d destinataires (Ctrl + C pour annuler l'envoi)" %len(mailaddrs)
raw_input("Envoyer ? (Ret pour envoyer)\n")
except KeyboardInterrupt:
cprint("\nEnvoi annulé.", 'rouge')
exit(1)
with mail.ServerConnection() as conn_smtp:
for To in mailaddrs:
cprint(u"Envoi du mail à %s" % To)
......
#!/bin/bash /usr/scripts/python.sh
# -*- mode: python; coding: utf-8 -*-
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
#
#Gabriel Detraz 2017
from lc_ldap import shortcuts
import argparse
import os
from datetime import datetime, timedelta
ldap = shortcuts.lc_ldap_readonly()
from gestion import mail as mail_module
From = "cableurs@crans.org"
def get_users_list(mode='day'):
now = datetime.now()
if mode=='day':
day_before = now - timedelta(days=1)
ldap_filter = u'(&(aid=*)(historique=%s/%s/%s*: inscription))' % ("{0:0=2d}".format(day_before.day), "{0:0=2d}".format(day_before.month), day_before.year)
users = ldap.search(ldap_filter)
elif mode=='hour':
hour_before = now - timedelta(hours=1)
ldap_filter = u'(&(aid=*)(historique=%s/%s/%s %s*: inscription))' % ("{0:0=2d}".format(hour_before.day), "{0:0=2d}".format(hour_before.month), hour_before.year, "{0:0=2d}".format(hour_before.hour))
users = ldap.search(ldap_filter)
else:
raise EnvironmentError
return users
def send_to_users(users, verbose=False):
errors = []
for user in users:
mail = user.get_mail()
if '@crans.org' in mail:
home = user.get('homeDirectory', default=[None])[0]
if home:
if not os.path.exists(home.value):
errors.append(user)
return
if verbose:
print(u"Envoie du mail de bienvenue à " + unicode(user))
print(mail)
send_bienvenue_mail(mail)
return users, errors
def send_bienvenue_mail(mail):
with mail_module.ServerConnection() as conn_smtp:
mailtxt=mail_module.generate('bienvenue', {'To':mail, 'From': From}).as_string()
conn_smtp.sendmail(From, (mail,), mailtxt)
return
def notif_sent_bienvenue(users, errors, mode='all'):
To = 'respbats@crans.org'
if not mode=='all' and not errors:
return
if not users:
return
with mail_module.ServerConnection() as conn_smtp:
all_users = ' ;\n '.join([user.__str__() for user in users]) or u"aucun"
all_errors = ' ;\n '.join([user.__str__() for user in errors]) or u"aucun"
mailtxt = mail_module.generate('notifbienvenue', {'users' : all_users, 'errors' : all_errors, 'To':To, 'From': From}).as_string()
conn_smtp.sendmail(From, (To,), mailtxt)
parser = argparse.ArgumentParser()
parser.add_argument('--hour', action="store_true", help="Traite l'ensemble des users crées dans l'heure précédente")
parser.add_argument('--day', action="store_true", help="Traite l'ensemble des users crées dans la journée précédente")
parser.add_argument('--mail', help="Envoie un mail de bienvenue au mail précisé")
parser.add_argument('--verbose', action="store_true", help="Mode verbeux")
parser.add_argument('--notifall', action="store_true", help="Notifie toutes les actions")
parser.add_argument('--notiferrors', action="store_true", help="Notifie les erreurs")
if __name__ == '__main__':
args = parser.parse_args()
if args.verbose:
verbose=True
else:
verbose=False
if args.mail:
print("Envoie du mail de bienvenue au mail " + args.mail)
send_bienvenue_mail(args.mail)
else:
if args.day:
users, errors = send_to_users(get_users_list(mode='day'), verbose=verbose)
elif args.hour:
users, errors = send_to_users(get_users_list(mode='hour'), verbose=verbose)
if args.notifall:
notif_sent_bienvenue(users, errors, mode='all')
if args.notiferrors:
notif_sent_bienvenue(users, errors, mode='errors')
......@@ -16,6 +16,7 @@ import requests
import re
import datetime
import time
import dateutil.parser
from gestion import mail
from utils.sendmail import actually_sendmail
......@@ -67,7 +68,7 @@ for job in jobs:
uid = job.find(attrs={'id': RE_JOB_NAME}).text
status = job.find(attrs={'id': RE_JOB_STATUS}).text
date = job.find(attrs={'id': RE_JOB_DATE}).text
date = datetime.datetime.strptime(date, '%Y/%m/%d %H:%M:%S')
date = dateutil.parser.parse(date)
# Hors intervalle: on drope
if date < debut or date >= fin:
......
Crans : Rappel assemblée générale extraordinaire du 26 novembre 2015
Crans : Ordre du jour de l'AGE du 16 Novembre 2017
Dear members,
We remind you that an Extraordinary General Meeting of the Crans will occur on Thursday,
November 26th, 2015 at 7.15 pm in Amphithéâtre Tocqueville.
The next Extraordinary General Meeting will take place on November,
16th.
Before the meeting, you have to validate the agreement with CROUS and ENS that allow us to provide Internet in your appartment. That's why we hope you'll be a lot to vote because we need that at least 5% of you vote to validate it. As there are elections of CA/CVE/CS for the ENS, we will be with them at the Pavillon des Jardins between 10h and 19h.
The following subjects are to be discussed :
We will find the agenda of the meeting and then the report on the wiki.
https://wiki.crans.org/ComptesRendusCrans/Jeudi26Novembre2015
* Agreement for a new global internet access of 1 Gb/s on the campus, for a
total amount of 50000 euros on 36 months
We hope to see you at this general meeting.
This point will be submit to the assembly's vote
--
Crans active members
* Others questions
The first goal of this meeting is the agreement of the contract
concerning the new fiber for the campus. This will increase the
bandwitdth, our connection being limited by the ENS for now, which leads
to some slowdown.
Moreover, this will help the Crans in going on performing its activities
after the moving of the ENS on the new campus.
You will be able to vote in the Kfet[1] (Maison de l'étudiant) during the
whole day.
--
Crans Board members
[1] https://osm.org/go/0BOchU0sx?relation=961459
Chers adhérents,
Bonjour à tou·te·s,
Pour rappel, ce Jeudi 26 novembre 2015, à partir de 19h15, aura lieu une Assemblée Générale Extraordinaire du Crans dans l'Amphithéâtre Tocqueville.
Cette Assemblée sera précédée d'un vote très important : vous devrez valider la convention signée avec l'ENS et le CROUS qui nous permet de vous fournir Internet dans les résidences. Nous espérons donc que vous serez nombreux à venir, le vote devant mobiliser au moins 5% des adhérents pour être validé. Nous serons au Pavillon des Jardins avec les élections CA/CVE/CS de l'ENS de 10h à 19h.
L'Assemblée Générale Extraordinaire du 16 novembre prochain aura pour
ordre du jour les points suivants :
Vous trouverez l'ordre du jour puis le compte-rendu de la réunion sur le wiki.
https://wiki.crans.org/ComptesRendusCrans/Jeudi26Novembre2015
* L'accord pour la signature d'un contrat pour une fibre optique de
débit 1Gb/s symétrique pour un montant total de 50000 euros pendant 36
mois.
En espérant vous voir jeudi.
Ce point sera soumis à un vote
--
Les membres actifs du Crans
* Questions diverses
Le point principal concerne donc l'approbation du contrat pour
fourniture d'un accès par fibre optique pour le campus. Cet accès aura
pour but d'augmenter le débit disponible, la liaison actuelle via l'ENS
étant limitée, cette limitation entrainant un ralentissement.
L'autre but sera de permettre au Crans de poursuivre ses activités après
le déménagement de l'ENS sur le campus de Saclay.
Un bureau de vote sera installé toute la journée à la Kfet [1] (Maison
de l'étudiant) du campus.
--
Le CA du Crans
[1] https://osm.org/go/0BOchU0sx?relation=961459
[Crans] Maintenance mercredi 25 janvier
[Crans] Coupure du réseau le 10 Novembre
"{{ adh|name }}" <{{adh.get_mail()}}>
{{To}}
Dear members,
Hello everybody,
Due to recurring errors on our storage server, we will have to shut it down
for maintenance on wednesday 25th, from 9pm.
As a consequence, all Crans services will remain unvailable, at the exception
of Internet access, although a few short interruptions may happen during operating time.
You can find more informations and the full list of shutdown services on:
https://wiki.crans.org/CransIncidents
Some electrical maintenance in the buildings of the ENS will lead to an
Internet outage from 5.30pm to 7.30pm. From the outside, the services
(mail, intranet, gitlab, irc...) will be unavailable during the
maintenance.
We apologize for the inconvenience,
--
Crans active members
The Crans Active members.
You are receiving this email because you are member of the Crans.
These mails will end up together with your membership.
Chers adhérents,
Bonjour à tou·t·es,
En raison d'erreurs récurrentes sur notre serveur de stockage, nous allons
procéder à une maintenance dans la soirée du mercredi 25 janvier à partir de 21h.
À cause d'une maintenance du réseau électrique dans les bâtiments de
l'ENS, l'accès à internet sera coupé de 17h30 à 19h30 environ. Depuis
l'extérieur du campus, les services (mail, intranet, gitlab, irc...)
seront inaccessibles durant la maintenance.
L'accès à Internet sera maintenu du mieux possible tout au long de
la maintenance, en revanche, tous les autres services, dont les mails,
mailing-list, owncloud, pages perso seront temporairement indisponibles.
Vous trouverez plus d'informations ainsi que la liste exhaustive des services
interrompus sur cette page : https://wiki.crans.org/CransIncidents
Nous nous excusons pour la gêne occasionnée,
--
Les membres actifs du Crans.
Nous vous prions de nous excuser pour la gêne occasionnée au cours de la soirée,
--
Les membres actifs du Crans
Vous recevez ce courriel car vous êtes adhérent·e du Crans.
Ces envois prendront fin à la fin de votre adhésion.
......@@ -14,12 +14,12 @@ among which:
* a wiki, gathering plenty of various information about life around Cachan [2];
* a newsgroup server [3];
* an IRC server [4];
* a Jabber IM server [5];
* a mail service : a reliable mail address @crans.org for a lifetime [6];
* a personal space of *9GB** on the server members [7];
* a mail service : a reliable mail address @crans.org for a lifetime [5];
* a personal space of *10GB** on the server members [6];
* a print service 24 hours a day, every day, A3 or A4, color or greyscale, with or
without clip, at cost [8];
* TV on the network [9].
without clip, at cost [7];
* TV on the network [8].
* and many more <https://intranet.crans.org
To ensure the proper functioning of these services, it is necessary that each
member respects the rules [10] agreed at registration.
......@@ -28,6 +28,13 @@ member respects the rules [10] agreed at registration.
The instructions for use of the Cr@ns services is available at:
<https://wiki.crans.org/CransPratique>. We urge you to refer to it, to learn
how to use the various services, or to resolve any problems encountered.
You can get more infos about technicals operations on these websites :
* Facebook : <https://www.facebook.com/CachanReseauNormaleSup>
* Twitter : <https://twitter.com/TwCrans>
* Wiki : <https://wiki.crans.org/CransIncidents>
If you have any problem with you network connection you can contact :
<respbats@crans.org>
Each member interested in the functioning of the association may contact
the technical team at <nounous@crans.org> or the administrative team
......
......@@ -5,7 +5,7 @@ Si tu lis ce mail, c'est que ton inscription à l'association
s'est déroulée correctement.
Le Cr@ns est une association gérée par des étudiants bénévoles pour les
étudiants résidant sur le campus.
résidents du campus.
Ses membres actifs s'occupent de la maintenance du réseau, des adhésions
(câblages), ainsi que de plusieurs services mis à la disposition de tous ses
......@@ -15,16 +15,16 @@ adhérents :
* un wiki, regroupant plein d'informations diverses concernant la vie ici [2] ;
* les news, fora de discussion abordant divers thèmes [3] ;
* un serveur IRC [4] ;
* un serveur de messagerie instantanée Jabber [5] ;
* un service de messagerie : une adresse mail @crans.org disponible à vie,
fiable, et avec possibilité d'installer des filtres très précis [6] ;
* un espace personnel de **9Go** sur le serveur des adhérents [7] ;
fiable, et avec possibilité d'installer des filtres très précis [5] ;
* un espace personnel de **10Go** sur le serveur des adhérents [6] ;
* un service d'impression, 24h/24 7j/7, A3 ou A4, couleur ou noir et blanc,
avec ou sans agrafe, à prix coûtant [8] ;
* la télévision par le réseau [9].
avec ou sans agrafe, à prix coûtant [7] ;
* la télévision par le réseau [8].
* et bien d'autres que tu peux retrouver sur <http://intranet.crans.org>
Afin d'assurer le bon fonctionnement de ces services, il est
nécessaire que chaque membre respecte du règlement intérieur [10] accepté lors
nécessaire que chaque membre respecte du règlement intérieur [9] accepté lors
de son inscription.
......@@ -33,16 +33,24 @@ La notice d'utilisation des services du CR@NS est disponible à cette adresse :
reporter aussi bien pour apprendre à utiliser les différents services que pour
résoudre les problèmes éventuellement rencontrés.
Pour être tenu au courant des opérations de maintenance vous pouvez consulter
les média suivants :
* Facebook : <https://www.facebook.com/CachanReseauNormaleSup>
* Twitter : <https://twitter.com/TwCrans>
* Wiki : <https://wiki.crans.org/CransIncidents>
En cas de problèmes, contacter <respbats@crans.org>
Chaque membre intéressé par le fonctionnement de l'association peut contacter
l'équipe technique à <nounous@crans.org> ou l'équipe administrative à
<ca@crans.org> et/ou se rendre aux réunions publiques du Cr@ns [11].
<ca@crans.org> et/ou se rendre aux réunions publiques du Cr@ns [10].
**Aucune connaissance technique préalable n'est requise pour participer !**
**A noter** : l'accès sans authentification aux news et au wiki est limité à
un usage interne au campus.
* Pour accéder depuis l'extérieur au wiki, il faut se créer un compte [12].
* Pour accéder depuis l'extérieur au wiki, il faut se créer un compte [11].
* Pour accéder depuis l'extérieur aux news, il faut s'identifier
(Utilisateur : Vivelapa / Mot de passe : ranoia!)
......
......@@ -2,12 +2,11 @@
[2]: https://wiki.crans.org
[3]: https://wiki.crans.org/VieCrans/ForumNews