Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- ### config_eduroam.py door Marco van den Boogaard
- ### Configureer WPA supplicant voor eduroam @HU
- ### Door de zeer specifieke instellingen van eduroam binnen de HU gaat
- ### dit handmatig vaak fout
- ### Het drie keer openen van het bestand is niet heel efficient, maar
- ### een bewuste keuze aangezien het bestand op die manier ook geheel
- ### ongemoeid gelaten kan worden.
- ### laatste wijziging: 10 juli 2017
- import smbpasswd
- import sys
- import getpass
- import re
- import errno
- wpa_config="/etc/wpa_supplicant/wpa_supplicant.conf"
- # Open het configuratiebestand om de bestaande configuratie in te lezen en
- # te controleren of er een oude (al dan niet werkende) eduroam
- # configuratie verwijderd moet worden
- # Met behulp van reguliere expressies en hulpvariabelen wordt
- # de configuratiefile geparsed en vastgelegd waar een
- # eventuele eduroam configuratie zich bevindt.
- eduroam = False
- try:
- with open(wpa_config, "r") as f:
- alllines = f.readlines()
- deletelist = []
- for linenr in range(len(alllines)):
- if re.match("[ \t]*network[ \t]*=[{][ \t]*$", alllines[linenr]):
- networkstart=linenr
- if re.match("[ \t]*ssid[ \t]*=[ \t]*\"eduroam\"[ \t]*$", alllines[linenr].lower()):
- eduroam=True
- if eduroam and re.match("[ \t]*[}][ \t]*$", alllines[linenr]):
- # tel in ieder geval 1 op bij het regelnummer aangezien we starten bij 0, en 2 als er een lege regel volgt (anders wordt bij herhaaldelijk gebruik van dit script het configuratiebestand steeds langer met lege regels
- if linenr < len(alllines)-1 and re.match("^$", alllines[linenr+1]):
- networkend=linenr+2
- else:
- networkend=linenr+1
- # zet het hele blok met betrekking tot eduroam vooraan de lijst van te verwijderen regels, zodat de laatste regels het eerste weggaan (anders klopt gaandeweg de telling niet meer)
- deletelist.insert(0, (networkstart, networkend))
- # reset eduroam hulpvariabele, mogelijk zijn er meer eduroam blokken
- eduroam=False
- except IOError as e:
- if e.errno == errno.ENOENT:
- print "Bestand {} niet gevonden".format(wpa_config)
- exit(e.errno)
- elif e.errno == errno.EACCES:
- print "Kan bestand {} niet lezen.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
- exit(e.errno)
- else:
- raise
- # Schrijf het bestand zonder de oude eduroam configuratie alleen weg
- # indien nodig, en met toestemming van de gebruiker
- if len(deletelist) > 0:
- if raw_input("Er is een oude eduroam configuratie gevonden.\nConfiguratie van andere netwerken blijft ongemoeid.\nOude eduroam configuratie verwijderen (j/n)? ") == "j":
- for (begin, eind) in deletelist:
- del alllines[begin:eind]
- else:
- print "Programma afgebroken, er zijn geen wijzigingen aangebracht"
- exit()
- try:
- with open(wpa_config, "w") as f:
- for line in alllines:
- f.write(line)
- except IOError as e:
- if e.errno == errno.ENOENT:
- # Dit zou nu niet meer mogen gebeuren, er is al succesvol gelezen
- print "Bestand {} niet gevonden".format(wpa_config)
- exit(e.errno)
- elif e.errno == errno.EACCES:
- print "Kan bestand {} niet schrijven.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
- exit(e.errno)
- else:
- raise
- # Vraag naar de Eduroam inloggegevens:
- # username bevat hierna de inlognaam
- # pwdhash bevat hierna de password hash in NTLM formaat (het is slechts
- # een MD4 hash, maar beter dan een plaintext wachtwoord in
- # het configuratiebestand op een systeem waar niet gegarandeerd
- # is dat het root account erg veilig is
- # pwdcheck is alleen tijdelijk nodig voor controle van het wachtwoord
- print("Hieronder wordt gevraagd om gebruikersnaam en (2x) wachtwoord. Sluit af met <Enter>.\nBij het invoeren van het wachtwoord krijg je niets te zien, dit hoort zo.\n")
- username=raw_input("HU account: ")
- # Blijf om paren wachtwoorden vragen tot de twee wachtwoorden met elkaar matchen
- while True:
- pwdhash=str.lower(smbpasswd.nthash(getpass.getpass("Wachtwoord: ")))
- pwdcheck=str.lower(smbpasswd.nthash(getpass.getpass("Herhaal wachtwoord: ")))
- if pwdhash == pwdcheck:
- # matchende wachtwoorden ingegeven, ga verder
- break
- else:
- print("De ingevoerde wachtwoorden zijn niet gelijk. Probeer het opnieuw")
- # Definieer nieuw configuratieblok voor eduroam;
- # username en pwdhash worden met behulp van string.format() toegevoegd,
- # daarom moeten ook de open- en sluitaccolades pas dan worden toegevoegd,
- # anders raakt format() in de war
- eduroam_config="""
- network={}
- ssid=\"eduroam\"
- proto=RSN
- key_mgmt=WPA-EAP
- pairwise=CCMP
- auth_alg=OPEN
- eap=PEAP
- identity=\"{}\"
- password=hash:{}
- phase2=\"auth=MSCHAPV2\"
- {}
- """
- try:
- with open(wpa_config, "a") as f:
- f.write(eduroam_config.format("{",username, pwdhash,"}"))
- except IOError as e:
- if e.errno == errno.ENOENT:
- # Dit zou nu niet meer mogen gebeuren, er is al succesvol gelezen
- print "Bestand {} niet gevonden".format(wpa_config)
- exit(e.errno)
- elif e.errno == errno.EACCES:
- print "Kan bestand {} niet schrijven.\nWordt het script wel met rootrechten gedraaid?\nDit kan met behulp van de applicatielink op de desktop,\nmet behulp van sudo of vanuit een root login".format(wpa_config)
- exit(e.errno)
- else:
- raise
Add Comment
Please, Sign In to add comment